android pass bundle with search

后端 未结 5 1817
南笙
南笙 2020-12-06 13:02

Hello i am using android 3.0 search widget(not the search mode), the problem is i need to pass some parameters along with the search word.

Android i

相关标签:
5条回答
  • 2020-12-06 13:16

    when querying by searchview ( searchable || searchview widget ) you can pass parameter to searchActivity ( searchResultActivity ) by define your own OnQueryTextListener like this.

    searchView.setOnQueryTextListener(new OnQueryTextListener() {
    
            @Override
            public boolean onQueryTextChange(String arg0) {
                // TODO Auto-generated method stub
                return false;
            }
    
            @Override
            public boolean onQueryTextSubmit(String query) {
                Intent searchIntent = new Intent(getApplicationContext(), SearchResultsActivity.class);
                searchIntent.putExtra(SearchManager.QUERY, query);
                searchIntent.setAction(Intent.ACTION_SEARCH);
                startActivity(searchIntent);
                return true;
            }
        });
    
    0 讨论(0)
  • 2020-12-06 13:21

    you can use the follow

    in Menu

        @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_al_ayats, menu);
    
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.action_search).getActionView();
        Bundle appData = new Bundle();
        appData.putString("hello", "world");
    
        searchView.setAppSearchData(appData);
    
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));
    
        return true;
    }
    

    and in your search result activity put the below

        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity_search_result);
    
        handleIntent(getIntent());
    }
    
        private void handleIntent(Intent intent) {
    
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
            String extrastring=intent.getBundleExtra(SearchManager.APP_DATA).getString("hello");
            //use the query to search your data somehow
            getSupportActionBar().setTitle(extrastring);
        }
    }
    
    0 讨论(0)
  • 2020-12-06 13:30

    If your calls is syncronic(you perform one search request and waiting for response and don't perform any search request until you got your response) then it's easy.

    Just create a helper static class to do it for you.

    Some thing like this:

    public static Bundle myStaticClass;
    .
    .
    .
    myStaticClass.putString(key, value);
    callSearch();
    .
    .
    .
    afterSearchResponse();
    String value = myStaticClass.get(key);
    
    0 讨论(0)
  • 2020-12-06 13:31

    pass data with bundle in Search Widget:

    layout/main.xml :

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:text="@string/hello" />
        <Button android:id="@+id/button" android:text="test"
            android:layout_width="fill_parent" android:layout_height="wrap_content" />
    </LinearLayout>
    

    layout/searchable.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/search_label"
        android:hint="@string/search_hint" 
        android:searchMode="showSearchLabelAsBadge"
        android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
        android:voiceLanguageModel="free_form"
        android:voicePromptText="@string/search_invoke"
        android:searchSuggestSelection=" ? "
    />
    

    values/strings.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="hello">Hello World, SearchTest!</string>
    <string name="app_name">Searchtest</string>
    <string name="search_label">Search Test</string>
    <string name="search_hint">1234</string>
    <string name="search_invoke">234</string>
    <string name="search_query_results">544545</string>
    </resources>
    

    AndroidManifest.xml :

    <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:label="@string/app_name"
                android:name=".SearchWidgetExampleTest" >
                <intent-filter >
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <meta-data android:name="android.app.default_searchable"
                           android:value=".ResultActivty" />
            </activity>
    
             <activity android:name=".ResultActivty"
                      android:label="@string/search_query_results">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.SAMPLE_CODE" />
                </intent-filter>
                <intent-filter>
                    <action android:name="android.intent.action.SEARCH" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
                <meta-data android:name="android.app.searchable"
                           android:resource="@layout/searchable" />
            </activity>
        </application>
    

    ResultActivty.java:

    package org.imranandroid.TestSearchexmp;
    import android.app.Activity;
    import android.app.SearchManager;
    import android.os.Bundle;
    import android.widget.Toast;
    
    public class ResultActivty extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bundle bundled= getIntent().getBundleExtra(SearchManager.APP_DATA);
            Long ttdata=bundled.getLong("listino_id");
            Toast.makeText(this, ttdata.toString(), Toast.LENGTH_SHORT).show();
        }
    }
    

    SearchWidgetExampleTest.java :

    package org.imranandroid.TestSearchexmp;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class SearchWidgetExampleTest extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button button1 = (Button) findViewById(R.id.button);
            button1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    onSearchRequested();
                }
            });
        }
        @Override
        public boolean onSearchRequested() {
            Bundle appDataBundle = new Bundle();
            appDataBundle.putLong("listino_id", 4434724724L);
            startSearch("imran", false, appDataBundle, false);
            return true;
        }
    }
    

    Happly Coding!!!

    0 讨论(0)
  • 2020-12-06 13:36

    Check if you have hard coded strings for android:hint or android:label in res/xml/searchable.xml. They must be string resource ids.

    0 讨论(0)
提交回复
热议问题