কীভাবে টুলবার অ্যান্ড্রয়েডে অনুসন্ধান ভিউ ব্যবহার করবেন


124

আমি যে Toolbarকোডটিতে কাজ করছি, এটি একটি ব্যবহার করছে এবং একটি ফুলেছে menu

কোডটি এখানে

private Toolbar mToolbar;
mToolbar.inflateMenu(R.menu.chat_screen_menu);
setupMenu ();
private void setupMenu ()
   {
   mMenu = mToolbar.getMenu();
   if (mMenu != null)
      {
       if (mChatPager != null && mChatPager.getCurrentItem() > 0)
          {
          mMenu.setGroupVisible(R.id.menu_group_chats, true);
          mMenu.setGroupVisible(R.id.menu_group_contacts, false);
          }
       else
          {
           mMenu.setGroupVisible(R.id.menu_group_chats, false);
           mMenu.setGroupVisible(R.id.menu_group_contacts, true);
           mMenu.setGroupVisible(R.id.menu_group_otr_verified,false);
           mMenu.setGroupVisible(R.id.menu_group_otr_unverified,false);
           mMenu.setGroupVisible(R.id.menu_group_otr_off,false);
          }
    }
    mToolbar.setOnMenuItemClickListener(new OnMenuItemClickListener ()
    {
    ..........
    }
}

তবে এখন, তাদের কাছে একটি Searchবোতাম দরকার tool_bar। আমি এটি রাখতে সক্ষম হয়েছি, আমি এখানে একটি গাইড অনুসরণ করেছি যখন আমি অনুসন্ধান করার জন্য কিছু লেখার চেষ্টা করি, listenerকখনই দেখানো হয়নি যা পরীক্ষা করার জন্য আমি টোস্টটি রেখেছিলাম । যা কাজ করে listenerনা তা নির্দেশ করে

@Override
    public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.chat_screen_menu, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    mSearchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_menu_search));
    final Toast toast = new Toast(mApp);

    if (mSearchView != null )
    {
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        mSearchView.setIconifiedByDefault(false);

        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener()
        {
            public boolean onQueryTextChange(String newText)
            {
                mSearchString = newText;
                //doFilterAsync(mSearchString);
                toast.makeText(getApplicationContext(), "Test1", Toast.LENGTH_LONG).show();
                return true;
            }

            public boolean onQueryTextSubmit(String query)
            {
                mSearchString = query;
                //doFilterAsync(mSearchString);
                toast.makeText(getApplicationContext(), "Test2", Toast.LENGTH_LONG).show();

                return true;
            }
        };

        mSearchView.setOnQueryTextListener(queryTextListener);
    }

    return true;

}

উত্তর:


205

তার জন্য আপনাকে Appcompatগ্রন্থাগার ব্যবহার করতে হবে। যা নীচের মতো ব্যবহৃত হয়:

dashboard.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="always|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        android:title="Search"/>
</menu>

ক্রিয়াকলাপ ফাইল (জাভাতে):

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.dashboard, menu);

     MenuItem searchItem = menu.findItem(R.id.action_search);

    SearchManager searchManager = (SearchManager) MainActivity.this.getSystemService(Context.SEARCH_SERVICE);

    SearchView searchView = null;
    if (searchItem != null) {
        searchView = (SearchView) searchItem.getActionView();
    }
    if (searchView != null) {
        searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName()));
    }
        return super.onCreateOptionsMenu(menu);
}

ক্রিয়াকলাপ ফাইল (কোটলিনে):

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.menu_search, menu)

    val searchItem: MenuItem? = menu?.findItem(R.id.action_search)
    val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
    val searchView: SearchView? = searchItem?.actionView as SearchView

    searchView?.setSearchableInfo(searchManager.getSearchableInfo(componentName))
    return super.onCreateOptionsMenu(menu)
}

ম্যানিফেস্ট ফাইল:

<meta-data 
      android:name="android.app.default_searchable" 
      android:value="com.apkgetter.SearchResultsActivity" /> 

        <activity
            android:name="com.apkgetter.SearchResultsActivity"
            android:label="@string/app_name"
            android:launchMode="singleTop" >
            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable" />
        </activity>

অনুসন্ধানযোগ্য এক্সএমএল ফাইল:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/search_hint"
    android:label="@string/app_name" />

এবং সবশেষে, আপনার SearchResultsActivityক্লাস কোড। আপনার অনুসন্ধানের ফলাফল দেখানোর জন্য।


18
নোট করুন যে এখন আপনার করা উচিতimport android.support.v7.widget.SearchView
জোয়াকুইন ইরচুক

ধন্যবাদ, "গো" ক্লিকটি কীভাবে পরিচালনা করবেন? এটি সাহায্য করবে
বালা বিষ্ণু

2
আমি শুধু সরকারী ডকুমেন্টেশন যেখানে আপনি কিভাবে কোয়েরি প্রতিক্রিয়া খুঁজে পেতে পারেন লিঙ্ক করবে developer.android.com/training/search/setup.html
koesclem

2
অ্যাপটি নোট করুন: অ্যান্ড্রয়েডের পরিবর্তে অ্যাকশনভিউক্লাস: অ্যাকশনভিউক্লাস
ড্রাগনটি

1
আপনি androidX ব্যবহার চলে আসেন থাকেন তাহলে:androidx.appcompat.widget.SearchView
Daniil

169

আপনি যদি নিজের ভিতরে অনুসন্ধানের ব্যবস্থা স্থাপন করতে চান Fragmentতবে এই কয়েকটি লাইন যুক্ত করুন:

পদক্ষেপ 1 - অনুসন্ধান ক্ষেত্রটি আপনাকে যুক্ত করুন toolbar:

<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    app:showAsAction="always|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:title="Search"/>

পদক্ষেপ 2 - আপনার যুক্তি যুক্ত করুনonCreateOptionsMenu()

import android.support.v7.widget.SearchView; // not the default !

@Override
public boolean onCreateOptionsMenu( Menu menu) {
    getMenuInflater().inflate( R.menu.main, menu);

    MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
    searchView = (SearchView) myActionMenuItem.getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            // Toast like print
            UserFeedback.show( "SearchOnQueryTextSubmit: " + query);
            if( ! searchView.isIconified()) {
                searchView.setIconified(true);
            }
            myActionMenuItem.collapseActionView();
            return false;
        }
        @Override
        public boolean onQueryTextChange(String s) {
            // UserFeedback.show( "SearchOnQueryTextChanged: " + s);
            return false;
        }
    });
    return true;
}

29
এই উত্তরটি আরও বেশি সহায়ক যদি আপনি কোনও ব্যবহারকারী অনুসন্ধান অনুসন্ধান জমা দেওয়ার পরে কোনও নতুন ক্রিয়াকলাপটি তৈরি / সরাতে না চান। এটি আপনাকে একই ক্রিয়াকলাপ / খণ্ডে থাকতে দেয় এবং ব্যবহারকারীদের ইনপুটের উপর ভিত্তি করে একটি দৃশ্য আপডেট করতে দেয়। দুর্দান্ত জিনিস।
নিক.ডি

3
ইউজারফিডব্যাক ... আমার টোস্ট-লাইক পদ্ধতি method
tm1701

কীবোর্ড ইনপুটটি অনুসন্ধানের দৃশ্যে নেওয়া হয়নি
সারাওয়ানান

কি R.menu.main?
অ্যালস্টন

CreateOptionsMenu (@ নননুল মেনু মেনু, @ নননুল মেনুআইনফ্লেটার ইনফ্ল্যাটার) সর্বজনীন শূন্য {} আপনি সরাসরি এই পদ্ধতিটি এখানে কল করতে পারেন আপনি নিজের মেনুতে বিভ্রান্ত করতে পারেন, এবং ক্রিয়াকলাপ ব্যবহার না করে টুকরা থেকে এই ডিরেক্টলিটিকে পরিচালনা করতে পারেন। সুন্দর ধন্যবাদ
আমার সিংহ

39

আপনি যদি এটি সরাসরি টুলবারে যুক্ত করতে চান।

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <SearchView
            android:id="@+id/searchView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:iconifiedByDefault="false"
            android:queryHint="Search"
            android:layout_centerHorizontal="true" />

    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>


2
আপনি যদি সমর্থন অনুসন্ধান ভিউ ব্যবহার করছেন তবে android.support.v7.widget.SearchViewএটি এক্সএমএল হিসাবে ঘোষণা করতেও ভুলবেন না।
পরিত্যক্ত কার্ট

গ্রেডে যুক্ত করতে ভুলবেন নাimplementation 'com.android.support:design:$latest_version'
আলী

আইকনযুক্ত কী ?
ইগোরগানাপলস্কি

যদি আপনি সবসময় দৃশ্যমান হতে অনুসন্ধান ক্ষেত্র, তাহলে ডক্স থেকে setIconifiedByDefault (মিথ্যা) ¨ কল
Noe

16

পুনর্ব্যবহারযোগ্য ভিউয়ের সাথে অনুসন্ধানের ভিউ সংহত করে

1) মেনুতে অনুসন্ধানের আইটেম যুক্ত করুন

SearchViewactionViewব্যবহার হিসাবে মেনু হিসাবে যোগ করা যেতে পারে

অ্যাপ্লিকেশন: useActionClass = "android.support.v7.widget.SearchView"।

<menu 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"
tools:context="rohksin.com.searchviewdemo.MainActivity">
<item
    android:id="@+id/searchBar"
    app:showAsAction="always"
    app:actionViewClass="android.support.v7.widget.SearchView"
    />
</menu>

2) আপনার ক্রিয়াকলাপে SearchView.OnQueryTextListener প্রয়োগ করুন

SearchView.OnQueryTextListenerদুটি বিমূর্ত পদ্ধতি আছে। সুতরাং অনুসন্ধানের পাঠ্য শ্রোতার প্রয়োগের পরে আপনার ক্রিয়াকলাপ কঙ্কালটি এখন এ জাতীয় দেখাচ্ছে।

YourActivity extends AppCompatActivity implements SearchView.OnQueryTextListener{

   public boolean onQueryTextSubmit(String query)

   public boolean onQueryTextChange(String newText) 

}

3) সার্চভিউ ইঙ্গিত পাঠ্য, শ্রোতা ইত্যাদি সেট আপ করুন

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);

    MenuItem searchItem = menu.findItem(R.id.searchBar);

    SearchView searchView = (SearchView) searchItem.getActionView();
    searchView.setQueryHint("Search People");
    searchView.setOnQueryTextListener(this);
    searchView.setIconified(false);

    return true;
}

4) অনুসন্ধান ভিভ.অনকুয়েরি টেক্সটলিস্টনার প্রয়োগ করুন

আপনি শ্রোতার বিমূর্ত পদ্ধতিটি এভাবে প্রয়োগ করতে পারেন।

@Override
public boolean onQueryTextSubmit(String query) {

    // This method can be used when a query is submitted eg. creating search history using SQLite DB

    Toast.makeText(this, "Query Inserted", Toast.LENGTH_SHORT).show();
    return true;
}

@Override
public boolean onQueryTextChange(String newText) {

    adapter.filter(newText);
    return true;
}

5) আপনার পুনর্ব্যবহারযোগ্য অ্যাডাপ্টারে একটি ফিল্টার পদ্ধতি লিখুন।

আপনার প্রয়োজনের উপর ভিত্তি করে আপনি নিজের যুক্তি নিয়ে আসতে পারেন। নামের তালিকাটি প্রদর্শনের জন্য নমুনা কোড স্নিপেট এখানে টাইপ করা পাঠ্য রয়েছে SearchView

public void filter(String queryText)
{
    list.clear();

    if(queryText.isEmpty())
    {
        list.addAll(copyList);
    }
    else
    {

        for(String name: copyList)
        {
            if(name.toLowerCase().contains(queryText.toLowerCase()))
            {
                list.add(name);
            }
        }

    }

    notifyDataSetChanged();
}

সম্পূর্ণ কার্যকারী কোডের নমুনা পাওয়া যাবে> এখানে
আপনি এই সঙ্গীত অ্যাপ্লিকেশনটিতে একটি এসকিউএল ডাটাবেসের সাহায্যে অনুসন্ধান ভিউ-তে কোডও দেখতে পারেন ER


মেনু কেন প্রয়োজনীয়?
ইগোরগানাপলস্কি

1

menu.xmlফাইলটি ব্যবহার না করে সার্চভিউ বাস্তবায়ন এবং বোতামের মাধ্যমে খোলা

আপনার মধ্যে Activityআমাদের সেই পদ্ধতির পদ্ধতিটি ব্যবহার onCreateOptionsMenuকরতে হবে যাতে আমরা প্রোগ্রামটিভভাবে ফুলে উঠবSearchView

private MenuItem searchMenu;
private String mSearchString="";

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        SearchManager searchManager = (SearchManager) StoreActivity.this.getSystemService(Context.SEARCH_SERVICE);


        SearchView mSearchView = new SearchView(getSupportActionBar().getThemedContext());
        mSearchView.setQueryHint(getString(R.string.prompt_search)); /// YOUR HINT MESSAGE
        mSearchView.setMaxWidth(Integer.MAX_VALUE);

        searchMenu = menu.add("searchMenu").setVisible(false).setActionView(mSearchView);
        searchMenu.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);


        assert searchManager != null;
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        mSearchView.setIconifiedByDefault(false);

        SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
            public boolean onQueryTextChange(String newText) {
                mSearchString = newText;

                return true;
            }

            public boolean onQueryTextSubmit(String query) {
                mSearchString = query;

                searchMenu.collapseActionView();


                return true;
            }
        };

        mSearchView.setOnQueryTextListener(queryTextListener);


        return true;
    }

এবং আপনার ক্রিয়াকলাপ শ্রেণিতে, আপনি SearchViewনীচের মত টুলবারে যে কোনও বোতামে ক্লিক করতে পারেন খুলতে পারেন

YOUR_BUTTON.setOnClickListener(view -> {

            searchMenu.expandActionView();

        });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.