Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में SearchView का उपयोग कैसे करें?

एंड्रॉइड में SearchView के साथ लिस्ट फिल्टरिंग

यह ट्यूटोरियल SearchView को ListView और ArrayAdapter के साथ इंटीग्रेट करके रियल-टाइम फिल्टरिंग लागू करने का तरीका दिखाता है।

लेआउट (activity_main.xml)

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <SearchView
        android:id="@+id/searchView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:iconifiedByDefault="false"
        android:queryHint="यहां खोजें..." />

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/searchView"
        android:layout_marginTop="8dp"
        android:divider="#E0E0E0"
        android:dividerHeight="1dp" />
</RelativeLayout>

MainActivity.java

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private SearchView searchView;
    private ListView listView;
    private ArrayAdapter adapter;
    private List fruitList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        searchView = findViewById(R.id.searchView);
        listView = findViewById(R.id.listView);

        // सैंपल डेटा
        fruitList = new ArrayList<>(Arrays.asList(
            "सेब", "केला", "अनानास", "संतरा", "आम",
            "अंगूर", "नींबू", "खरबूजा", "तरबूज", "पपीता",
            "स्ट्रॉबेरी", "ब्लूबेरी", "रास्पबेरी", "कीवी", "अनार"
        ));

        // ArrayAdapter सेटअप
        adapter = new ArrayAdapter<>(
            this,
            android.R.layout.simple_list_item_1,
            fruitList
        );
        listView.setAdapter(adapter);

        // SearchView लिस्टनर
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // एंटर/सबमिट दबाने पर
                if (!adapter.getFilter().filter(query)) {
                    Toast.makeText(MainActivity.this, "कोई मिलान नहीं: " + query, Toast.LENGTH_SHORT).show();
                }
                searchView.clearFocus();
                return true;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                // रियल-टाइम फिल्टरिंग (हर कीस्ट्रोक पर)
                adapter.getFilter().filter(newText);
                return true;
            }
        });

        // वैकल्पिक: फोकस बदलाव पर कीबोर्ड छुपाएं
        searchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> {
            if (!hasFocus) {
                hideKeyboard();
            }
        });

        // आइटम क्लिक लिस्टनर
        listView.setOnItemClickListener((parent, view, position, id) -> {
            String selected = adapter.getItem(position);
            Toast.makeText(this, "चुना गया: " + selected, Toast.LENGTH_SHORT).show();
        });
    }

    private void hideKeyboard() {
        android.view.inputmethod.InputMethodManager imm = 
            (android.view.inputmethod.InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
        }
    }
}

कस्टम फिल्टरिंग (कस्टम ऑब्जेक्ट्स के लिए)

public class Fruit {
    String name;
    String category;
    
    // कंस्ट्रक्टर, गेटर्स...
}

// कस्टम एडॉप्टर में Filterable इम्प्लीमेंट करें
public class FruitAdapter extends ArrayAdapter implements Filterable {
    private List originalList;
    private List filteredList;
    private FruitFilter filter;

    @Override
    public Filter getFilter() {
        if (filter == null) filter = new FruitFilter();
        return filter;
    }

    private class FruitFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            if (constraint == null || constraint.length() == 0) {
                results.values = originalList;
                results.count = originalList.size();
            } else {
                List filtered = new ArrayList<>();
                String query = constraint.toString().toLowerCase();
                for (Fruit fruit : originalList) {
                    if (fruit.getName().toLowerCase().contains(query) ||
                        fruit.getCategory().toLowerCase().contains(query)) {
                        filtered.add(fruit);
                    }
                }
                results.values = filtered;
                results.count = filtered.size();
            }
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            filteredList = (List) results.values;
            notifyDataSetChanged();
        }
    }
}

SearchView कस्टमाइज़ेशन

// सर्च आइकन बदलें
searchView.setIconifiedByDefault(false); // हमेशा एक्सपैंडेड
searchView.setSubmitButtonEnabled(true); // सबमिट बटन दिखाएं

// टेक्स्ट कलर
int searchTextId = searchView.getContext().getResources()
    .getIdentifier("android:id/search_src_text", null, null);
TextView searchText = searchView.findViewById(searchTextId);
searchText.setTextColor(Color.BLACK);
searchText.setHintTextColor(Color.GRAY);

// बैकग्राउंड
int plateId = searchView.getContext().getResources()
    .getIdentifier("android:id/search_plate", null, null);
View plate = searchView.findViewById(plateId);
plate.setBackgroundResource(R.drawable.search_bg);

मॉडर्न: RecyclerView + SearchView

// RecyclerView एडॉप्टर में
adapter.getFilter().filter(query);

// या Kotlin एक्सटेंशन के साथ
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
    override fun onQueryTextChange(newText: String) = adapter.filter(newText).also { true }
    override fun onQueryTextSubmit(query: String) = true
})

बेस्ट प्रैक्टिसेज

  • बड़े डेटासेट के लिए Filterable इम्प्लीमेंट करें
  • डिबाउंसिंग जोड़ें (RxJava/Kotlin Flow) अत्यधिक फिल्टरिंग से बचने के लिए
  • खाली स्टेट UI दिखाएं जब कोई परिणाम न हो
  • हाल की खोजों को सेव करें (SharedPreferences/Room)
  • एक्सेसिबिलिटी: कंटेंट डिस्क्रिप्शन और लेबल प्रदान करें
  1. Android Toolbar में SearchView का उपयोग कैसे करें? Android Toolbar में SearchView का उपयोग कैसे करें?

    Android Toolbar/ActionBar में SearchView जोड़कर ListView फ़िल्टर करना टूलबार में सर्च आइकन जोड़कर ListView डेटा को रियल-टाइम फ़िल्टर करने का पूरा उदाहरण। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट में Toolbar और ListView res/layout/activity_main.xml: <?xml ve

  1. Android में Snackbar का उपयोग कैसे करें? Android में Snackbar का उपयोग कैसे करें?

    परिचय Snackbar Material Design का एक घटक है जो स्क्रीन के निचले भाग में एक संक्षिप्त संदेश दिखाता है। यह उदाहरण Snackbar के बुनियादी उपयोग और अनुकूलन को दर्शाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.

  1. Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें? Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें?

    परिचय NavigationView मटेरियल डिज़ाइन का साइड नेविगेशन ड्रॉअर (हैमबर्गर मेनू) है। यह DrawerLayout के अंदर होता है और मेनू आइटम्स, हेडर, और नेविगेशन हैंडलिंग प्रदान करता है। यह ट्यूटोरियल Navigation Components के साथ आधुनिक सेटअप दिखाता है। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं Android Studio में Fi