handling context menu

গত পর্বে আমরা যে মেন্যু তৈরি করেছি , সেখানে কোন আইটেম এ ক্লিক করলে যে প্রসেস হবে তা আমরা কিভাবে করবো , সেটা এই পর্বে দেখানো হবে । এই পর্ব বুঝার আগে গত পর্ব ভালোভাবে বুঝে আসা জরুরী 😊

contextual_menu.xml তে আগের মতই প্রোগ্রাম থাকবে -

 <?xml version="1.0" encoding="utf-8"?>  
 <menu xmlns:android="http://schemas.android.com/apk/res/android">  
   <item  
     android:id="@+id/show_more"  
     android:title="@string/show_more"></item>  
   <item  
     android:id="@+id/delete"  
     android:title="@string/delete"></item>  
   <item  
     android:id="@+id/edit"  
     android:title="@string/edit"></item>  
 </menu>  

activity_main.xml এও আগের মতই শুধু লিস্টভিউ থাকবে -

 <?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:app="http://schemas.android.com/apk/res-auto"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:layout_width="match_parent"  
   android:layout_height="match_parent"  
   android:orientation="vertical"  
   tools:context="com.example.user.timepicker.MainActivity"  
   android:background="@color/colorAccent">  
   <ListView  
     android:id="@+id/listView"  
     android:layout_width="match_parent"  
     android:layout_height="wrap_content"></ListView>  
 </LinearLayout>  

MainActivity.java তে -

 public class MainActivity extends AppCompatActivity {  
   ListView listView;  
   ArrayAdapter<String> adapter;  
   ArrayList<String> arrayList = new ArrayList<String>() ;  

আগেরবার আমরা String Array এর মাধ্যমে ভ্যালু নিয়েছিলাম কিন্তু এবার যেহেতু ( ধরি একদম উপরের আইটেম ডিলেট করবো , তাহলে যেহেতু বাকি আইটেমগুলো পজিশন পাল্টে নতুনভাবে পজিশন নিল তাই ঠিকভাবে এই কাজটা করতে  ArrayList ব্যাবহার করতে হবে )

   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.activity_main);  
     listView = findViewById(R.id.listView);  
     registerForContextMenu(listView);  
     arrayList.add("Bangladesh");  
     arrayList.add("India");  
     arrayList.add("Pakistan");  
     arrayList.add("Srilanka");  
     arrayList.add("Zimbabwe");  
     arrayList.add("Afganiztan");  
     adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,arrayList);  
     listView.setAdapter(adapter);  
   }  

onCreate ম্যাথডের ভিতর ArrayList এর মাধ্যমে ডাঁটাগুলো নিলাম । বাকি সব আগের পর্বের মতই । আর এখানে এডাপ্টর এর শেষ কন্সট্রাক্টর হিসেবে ArrayList এর অব্জেক্ট পাস করলাম যেহেতু আমার ডাঁটাগুলো সব ArrayList এর অব্জেক্ট এর ভিতর আছে ।

context মেন্যু তে onclick অপশন আনার জন্য onContextItemSelected ম্যাথডটি ব্যাবহার করতে হবে ।

   @Override  
   public boolean onContextItemSelected(MenuItem item) {  
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();  
     switch (item.getItemId()){  
       case R.id.show_more:  
         Toast.makeText(this, "updated ", Toast.LENGTH_SHORT).show();  
         break;  
       case R.id.delete:  
         arrayList.remove(info.position);  
         adapter.notifyDataSetChanged();  
         break;  
       case R.id.edit:  
         break;  
     }  
     return super.onContextItemSelected(item);  
   }  

প্রথমে  AdapterContextMenuInfo এর অব্জেক্ট তৈরি করলাম কেননা আমরা লিস্টভিউ এর যে আইটেম সিলেক্ট করবো ওই আইটেম টা নিয়েই যেন কাজ করে । এখানে ম্যাথডের মাধ্যমে MenuItem এর অব্জেক্ট হিসেবে item এ যে অপশনগুলো আসলো তার ভিতর যে অপশন ইউজার চুজ করছে ঠিক সেটাই info তে আসবে item.getMenuInfo() ম্যাথডের মাধ্যমে ।

এরপর সুইচ কেসের মাধ্যমে ContextMenu এর যে অপশনটি ইউজার চুজ করবে সেটির আইডি নিলাম । এরপর প্রতি আইডির জন্য সেইভাবে কোড করা হল ।

এখানে show more এবং edit এর কোন কোড করা হল নাহ কারন দুটি ক্ষেত্রেই আমাদের আলাদা লেআউট নিয়ে আরো কাজ করতে হবে যা বেসিক পর্যায়ে করতে গেলে হয়তো অনেকেই বুঝবে নাহ , তাই ডিলেট এর ছোট কোডটি শুধু দেয়া হইছে 😊😊

ধন্যবাদ 😊😊😊

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

Toggle Button - 10 ( Android Bangla Tutorial)

Spinner View - 11 ( Android Bangla Tutorial)

ImageView ( Android Bangla Tutorial - )