搜索视图意图确实启动了searchActivity

时间:2015-12-29 13:59:26

标签: java android

我在

中有一个searchView (android.support.v7.widget.SearchView)

toolbar,其他项目的每件事情都可以,但是当我使用这个

代码TabLayotViewPager无效。我没有错误

在此代码中,但当我键入搜索查询并按Enter键时,搜索活动不会显示。无论如何

这是toolbar =>中的菜单项main_menu.xml

<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=".MainActivity">

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="جستو ... "/>

</menu>

这是我onCreateOptionMenu()中的MainActivity

  //onCreateOptionsMenu()
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        //inflate the menu
        getMenuInflater().inflate(R.menu.main_menu , menu);

        //setup searchManager
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

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

        //searchview v7
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

        //setting the searchable info
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        searchView.setIconifiedByDefault(true);

        return true;
    }

这是SearchResultsActivity.java

package ghandak.ghandshekan.com.ghandak.activities;

import android.app.SearchManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

/**
 * Created by imajid on 12/28/2015.
 */
public class SearchResultsActivity extends AppCompatActivity {

    TextView txtQueryString;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results);
        Log.d("moshkel", "onCreate SearchResultActivity seda zade shod !!!!!!!!!!!!!!!!!!!!!!!!!!!!");
        Toolbar toolbar = (Toolbar)findViewById(R.id.xmlToolbarResult);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

        txtQueryString = (TextView)findViewById(R.id.txtSearchResult);

        handleIntent(getIntent());
    }

    //onCreateOptionsMenu()
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_search, menu);
        return true;
    }


    //onNewIntent()
    @Override
    protected void onNewIntent(Intent intent) {
        Log.d("moshkel" , "onNewIntent SearchResultActivity seda zade shod ????????????????????????");
        handleIntent(intent);
    }

    //handleIntent()
    private void handleIntent(Intent intent) {
        if(Intent.ACTION_SEARCH.equals(intent.getAction())){
            String searchQuery = intent.getStringExtra(SearchManager.QUERY);
            doSearchQuery(searchQuery);
        }
    }

    private void doSearchQuery(String searchQuery) {
        txtQueryString.setText(searchQuery);
    }

    private void backToMain(MenuItem item){
        startActivity(new Intent(SearchResultsActivity.this , MainActivity.class));
    }
}

这是searchable.xml

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

</searchable>

最后这是AndroidManifest

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ghandak.ghandshekan.com.ghandak.activities">
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:name="ghandak.ghandshekan.com.ghandak.app.AppController"
        android:theme="@style/AppTheme">
        <!-- MainActivity -->

        <activity android:name=".MainActivity"
            android:label="@string/app_name">
            <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=".SearchResultsActivity"
                />
        </activity>

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

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

</manifest>

1 个答案:

答案 0 :(得分:0)

试试此代码段

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
        inflater.inflate(R.menu.search_option_menu, menu);
        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = new SearchView(((MainActivity) mContext).getSupportActionBar().getThemedContext());
        MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
        MenuItemCompat.setActionView(item, searchView);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {

               //Here Replace with your SearchResultsActivity
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });

    }