কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড টুলবারে SearchView ব্যবহার করার পদ্ধতি

Toolbar-এ SearchView ইন্টিগ্রেশন এবং লিস্ট ফিল্টারিং

অ্যান্ড্রয়েড টুলবারে (ActionBar) SearchView যোগ করে একটি লিস্টভিউর ডেটা রিয়েল-টাইমে ফিল্টার করা যায়। এটি মেনু আইটেম হিসেবে `app:actionViewClass` ব্যবহার করে যোগ করা হয়।

ধাপ ১: প্রজেক্ট তৈরি করুন

অ্যান্ড্রয়েড স্টুডিওতে নতুন প্রজেক্ট।

ধাপ ২: মেইন লেআউটে টুলবার এবং লিস্টভিউ

res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.Dark" />
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/toolbar" />
    <TextView
        android:id="@+id/emptyView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="No Results"
        android:textSize="20sp"
        android:visibility="gone" />
</RelativeLayout>

ধাপ ৩: মেনু রিসোর্স তৈরি করুন

res/menu/menu.xml - SearchView আইটেম:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/appSearchBar"
        android:icon="@drawable/ic_search"
        android:title="Search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

ধাপ ৪: স্ট্রিং অ্যারে ডেটা

res/values/strings.xml:

<resources>
    <string name="app_name">Sample</string>
    <string-array name="months_array">
        <item>January</item> <item>February</item> <item>March</item>
        <item>April</item> <item>May</item> <item>June</item>
        <item>July</item> <item>August</item> <item>September</item>
        <item>October</item> <item>November</item> <item>December</item>
    </string-array>
</resources>

ধাপ ৫: মেইন এক্টিভিটি লজিক

src/MainActivity.java:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    Toolbar toolbar;
    ArrayAdapter<String> adapter;
    ListView listView;
    TextView emptyView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar); // টুলবার সেট করুন
        
        listView = findViewById(R.id.listView);
        emptyView = findViewById(R.id.emptyView);
        
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
            getResources().getStringArray(R.array.months_array));
        listView.setAdapter(adapter);
        listView.setEmptyView(emptyView);
        
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, 
                    parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();
            }
        });
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        
        MenuItem searchItem = menu.findItem(R.id.appSearchBar);
        SearchView searchView = (SearchView) searchItem.getActionView();
        searchView.setQueryHint("Search months...");
        
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }
            
            @Override
            public boolean onQueryTextChange(String newText) {
                adapter.getFilter().filter(newText);
                return true;
            }
        });
        
        return super.onCreateOptionsMenu(menu);
    }
}

মূল পয়েন্ট

  • setSupportActionBar(toolbar) কল করা বাধ্যতামূলক
  • app:showAsAction="ifRoom|collapseActionView" - সার্চ আইকন কollapse হয়
  • adapter.getFilter().filter() - বিল্ট-ইন ফিল্টারিং
  • কাস্টম অ্যাডাপ্টারের জন্য Filterable ইন্টারফেস ইমপ্লিমেন্ট করুন
অ্যান্ড্রয়েড টুলবারে SearchView ব্যবহার করার পদ্ধতি অ্যান্ড্রয়েড টুলবারে SearchView ব্যবহার করার পদ্ধতি অ্যান্ড্রয়েড টুলবারে SearchView ব্যবহার করার পদ্ধতি
  1. অ্যান্ড্রয়েড ফ্র্যাগমেন্টে Context ব্যবহারের পদ্ধতি

  2. অ্যান্ড্রয়েডে Firebase Messaging ব্যবহারের পদ্ধতি

  3. এন্ড্রয়েডে SearchView ব্যবহার করার পদ্ধতি

  4. অ্যান্ড্রয়েডে XMLPullParser ব্যবহার করে XML পার্স করার পদ্ধতি