SearchView in Action
বেশীরভাগ অ্যাপেই সার্চভিউ একশন বার এ ইউজ করা হয় । সার্চভিউ কিভাবে ইউজ করবো তা গত পর্বেই দেখানো হইছে আবার কিভাবে মেন্যু ইউজ করতে হয় তাও Options Menu এই পর্বে দেখানো হইছে । আমরা এই পর্বে দেখবো কিভাবে এই দুইয়ের সংমিশ্রনে একশন বার এ সার্চভিউ ইউজ করতে পারি । গত পর্বে অ্যাপ থিম হিসেবে আমরা NoActionBar ব্যাবহার করেছিলাম এবার তাই থিম চেঞ্জ করে DarkActionBar দিয়ে দিলাম ।
তো এজন্য একটি লিস্টভিউ বানিয়ে নিন এবং তাতে কিছু ডাটা এড করে নিন । গত পর্বেও দেয়া আছে । আমরা আগেই শিখে আসছি মেন্যু তৈরি করতে menu নামে নতুন ডিরেক্টরি ফাইল খুলতে হয় ।
menu ফাইলে menu resource file খুললাম , নাম দিলাম menu_item
menu_item.xml -
এখানে অবশ্যই actionViewClass টা লিখে দিতে হবে ।
লেআউট ফাইলে শুধুমাত্র লিস্টভিউ টা থাকবে ।
MainActivity.java -
পুরো কোডে লিস্টভিউ তে ডাটা এড করার কোড করা হইছে যা আমরা আগেই শিখে আসছি । এবার onCreate ম্যাথডের বাইরে মেন্যু তে ক্লিক করার কোড লেখবো -
MenuInflater এর মাধ্যমে মেন্যু টা নিয়ে আসলাম একশন বার এ । MenuItem এর মাধ্যমে ম্যাথডের ভিতরে প্যারামিটার হিসেবে আসা menu এর ভিতরে থাকা মেন্যুটি ফাইন্ড করলাম । এর আগে আমরা switch-case ইউজ করেছি , কিন্তু এখানে যেহেতু একটি মেন্যু তাই switch-case আর ইউজ করলাম নাহ। এরপরে SearchView এর অব্জেক্ট তৈরি করে getActionView নিয়ে নিলাম যাতে আমি সার্চ আইকন টি কিল্ক করলে তাকে দেয়া নির্দেশনা অনুযায়ী কাজ করে । এবার setOnQueryTextListener দ্বারা ফিল্টার করলাম যা আমরা আগের পর্বেই শিখে আসছি ।
এবার অ্যাপটি রান করুন । তো এভাবেই আপনি একশন বার এ সার্চভিউ ইউজ করতে পারেন 😊😊😊
তো এজন্য একটি লিস্টভিউ বানিয়ে নিন এবং তাতে কিছু ডাটা এড করে নিন । গত পর্বেও দেয়া আছে । আমরা আগেই শিখে আসছি মেন্যু তৈরি করতে menu নামে নতুন ডিরেক্টরি ফাইল খুলতে হয় ।
menu ফাইলে menu resource file খুললাম , নাম দিলাম menu_item
menu_item.xml -
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menuSearch"
android:title="Search"
app:actionViewClass="android.widget.SearchView"
android:icon="@drawable/search"
app:showAsAction="always"></item>
</menu>
এখানে অবশ্যই actionViewClass টা লিখে দিতে হবে ।
<?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.splashscreen.MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:listSelector="@color/colorPrimary"></ListView>
</LinearLayout>
লেআউট ফাইলে শুধুমাত্র লিস্টভিউ টা থাকবে ।
MainActivity.java -
public class MainActivity extends AppCompatActivity {
ListView listView;
String[] country_name;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
country_name = getResources().getStringArray(R.array.country_name);
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,country_name);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, adapter.getItem(i), Toast.LENGTH_SHORT).show();
}
});
}
পুরো কোডে লিস্টভিউ তে ডাটা এড করার কোড করা হইছে যা আমরা আগেই শিখে আসছি । এবার onCreate ম্যাথডের বাইরে মেন্যু তে ক্লিক করার কোড লেখবো -
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_item,menu);
MenuItem menuItem = menu.findItem(R.id.menuSearch);
SearchView searchView = (SearchView) menuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
adapter.getFilter().filter(s);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
MenuInflater এর মাধ্যমে মেন্যু টা নিয়ে আসলাম একশন বার এ । MenuItem এর মাধ্যমে ম্যাথডের ভিতরে প্যারামিটার হিসেবে আসা menu এর ভিতরে থাকা মেন্যুটি ফাইন্ড করলাম । এর আগে আমরা switch-case ইউজ করেছি , কিন্তু এখানে যেহেতু একটি মেন্যু তাই switch-case আর ইউজ করলাম নাহ। এরপরে SearchView এর অব্জেক্ট তৈরি করে getActionView নিয়ে নিলাম যাতে আমি সার্চ আইকন টি কিল্ক করলে তাকে দেয়া নির্দেশনা অনুযায়ী কাজ করে । এবার setOnQueryTextListener দ্বারা ফিল্টার করলাম যা আমরা আগের পর্বেই শিখে আসছি ।
এবার অ্যাপটি রান করুন । তো এভাবেই আপনি একশন বার এ সার্চভিউ ইউজ করতে পারেন 😊😊😊
মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন