context menu
এই পর্বে আমরা দেখবো কিভাবে contextual Menu নিয়ে কাজ করতে পারি । আমরা কোন আইটেম এর উপর ২-১ সেকেন্ড প্রেস করে রাখে তাহলে contextual Menu শো করবে । contextual Menu শো করানোর দুটি উপায় আছে ।
১ - Floating Contextual Menu
২ - Contextual Action Bar
Floating Contextual Menu দ্বারা আমরা ১টি আইটেম-ই সিলেক্ট করতে পারি কিন্তু Contextual Action Bar দ্বারা একাধিক আইটেম সিলেক্ট করা যায় ।
প্রথমে আমরা Floating Contextual Menu কিভাবে তৈরি করে সেটি দেখবো । তো চলুন Floating Contextual Menu এর মেন্যুগুলো তৈরি করা যাক । এ জন্য মেন্যু ডিরেক্টরি menu->New->menu resource file এর মাধ্যমে নতুন মেন্যু রিসোর্স ফাইল খুললাম । নাম দিলাম contextual_menu ।
contextual_menu.xml এ -
কতগুলো আইটেম ট্যাগ নিলাম যার ভিতর আমাদের অপশনগুলো বসিয়ে দিলাম । ইউজার কোন আইটেম ২-১ সেকেন্ড প্রেস করে রাখলে এই মেন্যু শো করবে যেখানে ইউজার চাইলে কোন আইটেম এর বিস্তারিত দেখতে পারবে , ডিলেট, ইডিট করতে পারবে ।
Floating Contextual Menu আমরা অ্যাপের ভিতরে কোন ভিউ এর সাথে শো করাবো । তো এজন্য একটি লিস্টভিউ নেয়া যাক । যেখানে কতগুলো আইটেম এর ভিউ থাকছে, যাতে যেটি ইচ্ছা সেটি নিয়ে ইউজার কাজ করতে পারে ।
activity_main.xml এ -
লিস্টভিউ নিলাম যেখানে কতগুল আইটেম আমরা ইউজারকে দেখাবো ।
MainActivity.java তে -
আমরা যেহেতু লিস্টভিউ নিয়ে কাজ করবো তাই লিস্টভিউ এর অব্জেক্ট তৈরি করলাম । এরপর লিস্টভিউ এর ভিতর যে লিস্ট দেখাবো সেটি তৈরি করলাম ( স্ট্রিং অ্যারে তে কতগুলো দেশের নাম নিলাম ) । আমরা জানি লিস্টভিউ এর সাথে তার কম্পোনেন্ট সংযোগ করতে ArrayAdapter ব্যাবহার করতে হয় , তাই ArrayAdapter এর অব্জেক্ট তৈরি করলাম ।
Floating Contextual Menu নিয়ে কাজ করতে যে ম্যাথড টি কল করতে হবে সেটি হল - onCreateContextMenu । আমরা জানি এটি onCreate ম্যাথডের বাইরে কল করতে হবে ।
এখানে যে কাজগুলো হয়েছে সে সম্পর্কে আমরা আগের পর্বেই জেনে আসছি ।
onCreate ম্যাথডে -
আমরা যে লিস্টভিউটি নিয়েছি সেটি সংযোগ করে দিলাম । আমরা এই লিস্টভিউ এর সাথে Contextual Menu দেখাবো , তাই লিস্টভিউ এর সাথে Contextual Menu রেজিস্টার করে নিতে হবে -
রেজিস্টার করে নিলাম ।
আমরা শিখে আসছি ডাঁটার সাথে লেআউট সংযোগ করতে এডাপ্টর ব্যাবহার করা হয় । তাই ArrayAdapter তৈরি করে প্রথমে কোন Activity তে হবে সেটি, এরপর লেআউট টি কিভাবে হবে তা এবং সর্বশেষে যে ডাঁটাগুলো দেখাবে সেগুলোর সংযোগ করলাম ।
এরপর লিস্টভিউয়ের সাথে এডাপ্টর অব্জেক্ট সংযোগ করে দিলাম ।
এবার অ্যাপটি রান করে দেখুন 😊😊😊😊 এবং কোন আইটেম এর উপর ২-১ সেকেন্ড লং প্রেস করে রাখুন
MainActivity.java ফুল কোড -
১ - Floating Contextual Menu
২ - Contextual Action Bar
Floating Contextual Menu দ্বারা আমরা ১টি আইটেম-ই সিলেক্ট করতে পারি কিন্তু Contextual Action Bar দ্বারা একাধিক আইটেম সিলেক্ট করা যায় ।
প্রথমে আমরা Floating Contextual Menu কিভাবে তৈরি করে সেটি দেখবো । তো চলুন Floating Contextual Menu এর মেন্যুগুলো তৈরি করা যাক । এ জন্য মেন্যু ডিরেক্টরি menu->New->menu resource file এর মাধ্যমে নতুন মেন্যু রিসোর্স ফাইল খুললাম । নাম দিলাম contextual_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>
কতগুলো আইটেম ট্যাগ নিলাম যার ভিতর আমাদের অপশনগুলো বসিয়ে দিলাম । ইউজার কোন আইটেম ২-১ সেকেন্ড প্রেস করে রাখলে এই মেন্যু শো করবে যেখানে ইউজার চাইলে কোন আইটেম এর বিস্তারিত দেখতে পারবে , ডিলেট, ইডিট করতে পারবে ।
Floating Contextual 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">
<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;
String[] country= {"Bangladesh","India","Pakistan","Srilanka","Afganiztan","Zimbabwe"};
ArrayAdapter<String> adapter;
আমরা যেহেতু লিস্টভিউ নিয়ে কাজ করবো তাই লিস্টভিউ এর অব্জেক্ট তৈরি করলাম । এরপর লিস্টভিউ এর ভিতর যে লিস্ট দেখাবো সেটি তৈরি করলাম ( স্ট্রিং অ্যারে তে কতগুলো দেশের নাম নিলাম ) । আমরা জানি লিস্টভিউ এর সাথে তার কম্পোনেন্ট সংযোগ করতে ArrayAdapter ব্যাবহার করতে হয় , তাই ArrayAdapter এর অব্জেক্ট তৈরি করলাম ।
Floating Contextual Menu নিয়ে কাজ করতে যে ম্যাথড টি কল করতে হবে সেটি হল - onCreateContextMenu । আমরা জানি এটি onCreate ম্যাথডের বাইরে কল করতে হবে ।
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.contextual_menu,menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
এখানে যে কাজগুলো হয়েছে সে সম্পর্কে আমরা আগের পর্বেই জেনে আসছি ।
onCreate ম্যাথডে -
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
আমরা যে লিস্টভিউটি নিয়েছি সেটি সংযোগ করে দিলাম । আমরা এই লিস্টভিউ এর সাথে Contextual Menu দেখাবো , তাই লিস্টভিউ এর সাথে Contextual Menu রেজিস্টার করে নিতে হবে -
registerForContextMenu(listView);
রেজিস্টার করে নিলাম ।
adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,country);
listView.setAdapter(adapter);
আমরা শিখে আসছি ডাঁটার সাথে লেআউট সংযোগ করতে এডাপ্টর ব্যাবহার করা হয় । তাই ArrayAdapter তৈরি করে প্রথমে কোন Activity তে হবে সেটি, এরপর লেআউট টি কিভাবে হবে তা এবং সর্বশেষে যে ডাঁটাগুলো দেখাবে সেগুলোর সংযোগ করলাম ।
এরপর লিস্টভিউয়ের সাথে এডাপ্টর অব্জেক্ট সংযোগ করে দিলাম ।
এবার অ্যাপটি রান করে দেখুন 😊😊😊😊 এবং কোন আইটেম এর উপর ২-১ সেকেন্ড লং প্রেস করে রাখুন
MainActivity.java ফুল কোড -
package com.example.user.timepicker;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TimePicker;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
ListView listView;
String[] country= {"Bangladesh","India","Pakistan","Srilanka","Afganiztan","Zimbabwe"};
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
registerForContextMenu(listView);
adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,country);
listView.setAdapter(adapter);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.contextual_menu,menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
}
মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন