Ich bin neu in der Entwicklung von Android-Apps und versuche derzeit herauszufinden, wie man eine Suche zu einer App hinzufügen kann. Ich habe ein wenig gesucht und das Tutorial, das für mich am einfachsten zu verstehen war, ist here.Android-Suche nach ListView ändern
Die App läuft und sucht wie es sollte. Das einzige Problem ist, dass das Tutorial zum Suchen einer ListView dient. Die Aktivität, in der die Suche meiner App gehostet wird, enthält andere Details (Elementansicht, Textansicht), die auf dem Bildschirm angezeigt werden müssen, damit ein ListView für das, was ich versuche, nicht funktioniert. Wie ändere ich dieses Beispiel, um eine Dropdownliste mit Vorschlägen zu erstellen, wenn der Benutzer in das Suchfeld eingibt? Idealerweise hätte ich gerne eine Suche wie in dieser image here gesehen.
ItemSearch.java
import android.app.SearchManager;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
public class ItemSearch extends AppCompatActivity {
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item_search_activity);
final String[] months = {"January", "February", "March", "April",
"May", "June", "July", "August", "September", "October",
"November", "December"};
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, months);
final ListView listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
String text = (String) listview.getItemAtPosition(position);
Toast.makeText(getApplicationContext(), text,
Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_search, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
return true;
}
}
item_search_acitivity.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<RelativeLayout 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"
android:id="@+id/item_view_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.me.ItemSearch">
<ImageView
/>
<ImageView
/>
<ImageView
/>
<TextView
/>
<TextView
/>
<TextView
/>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
</ScrollView>
menu_search.xml unter res/menu/menu_search
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/search"
android:title="@string/hint_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
searchable.xml unter res/xml/durchsuchbar
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint"
android:searchSuggestIntentAction="android.intent.action.VIEW">
</searchable>
In AndroidManifest.xml habe ich
hinzugefügt<activity android:name=".ItemSearch" 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>
Ich vermute, dass Sie bereits versucht https://androidhub.intel.com/en/posts/nglauber/Android_Search.html – zombie
@zombie ja, ich habe. Irgendwelche Vorschläge, wie die beiden ohne die CitySuggestionProvider.java-Klasse zusammengeführt werden? Ich möchte nur, dass die App das String-Array der Monate oben durchsucht. – cb92