Je suis en train de mettre en œuvre WhatsApp comme la recherche dans mes application.I doivent mettre en œuvre l'écran suivant:Activité interrogeable est pas appelé
Comme vous pouvez le voir dans la capture d'écran, j'ai une icône de recherche en tant que menu d'option.
XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/search"
android:orderInCategory="100"
android:title="@string/action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
</menu>
En cliquant sur Recherche icône Afficher de recherche sera ouvert.
CODE:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_friend_list_activity, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
Toast.makeText(getApplicationContext(), "Search button clicked", Toast.LENGTH_SHORT).show();
// Associate searchable configuration with the SearchView
SearchManager searchManager = (SearchManager) FriendsListActivity.this.getSystemService(Context.SEARCH_SERVICE);
if (item != null) {
searchView = (SearchView) item.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(FriendsListActivity.this.getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
Log.e("Query",query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
AndroidManifest.xml
<activity
android:name=".activity.FriendsListActivity"
android:parentActivityName=".activity.WelcomeActivity">
<!-- To display the search view-->
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity android:name=".activity.SearchResultsActivity">
<intent-filter>
<action
android:name="android.intent.action.SEARCH"
android:launchMode="singleTop" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
Vous pouvez voir ici i ont une activité interrogeable nommée SearchResultsActivity. Je suis le tutoriel this.
SearchResultsACtivity:
public class SearchResultsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Log.e("onCreate","in SerachActivity called");
handleIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
Log.e("Query1",query);
//use the query to search your data somehow
}
}
}
Je pense que je suis en train de faire quelque chose de mal here.When je suis en train de rechercher, SearchResultsActivity n'est pas appelé .Please me aider comment puis-je mettre en œuvre la recherche comme WhatsApp faire?
Parce que vous ne démarrez jamais SearchResultsActivity? –
vous pouvez également utiliser TextWatcher pour cela –
@MuratK. : Selon la documentation "Une activité interrogeable est l'activité de votre application qui effectue des recherches basées sur une chaîne de requête et présente les résultats de la recherche Lorsque l'utilisateur exécute une recherche dans la boîte de dialogue ou le widget de recherche, le système démarre votre activité de recherche et lui fournit la requête de recherche dans un Intent avec l'action ACTION_SEARCH.Votre activité de recherche récupère la requête du QUERY supplémentaire de l'intention, puis recherche vos données et présente les résultats. " –