我在
中有一个searchView (android.support.v7.widget.SearchView)
toolbar
,其他项目的每件事情都可以,但是当我使用这个
代码TabLayot
和ViewPager
无效。我没有错误
在此代码中,但当我键入搜索查询并按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>
答案 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;
}
});
}