<?xml version = "1.0" encoding = "utf-8"?>
<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:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity">
<ListView
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:id = "@+id/listView"
android:divider = "#ad5"
android:dividerHeight = "2dp"
android:layout_below = "@+id/searchView"/>
<SearchView
android:id = "@+id/searchView"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:queryHint = "Search Here"
android:iconifiedByDefault = "false"
android:layout_alignParentTop = "true"/>
</RelativeLayout>
Это XML-файл моего представления поиска. Он содержит представление поиска и представление списка.
public class MainActivity extends AppCompatActivity {
SearchView searchView;
ListView listView;
ArrayList list;
ArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchView = findViewById(R.id.searchView);
listView = findViewById(R.id.listView);
list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Pineapple");
list.add("Orange");
list.add("Mango");
list.add("Grapes");
list.add("Lemon");
list.add("Melon");
list.add("Watermelon");
list.add("Papaya");
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list);
listView.setAdapter(adapter);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
adapter.getFilter().filter(query.trim(), new Filter.FilterListener() {
@Override
public void onFilterComplete(int count) {
if (count==0){
Toast.makeText(MainActivity.this, "No Match found",Toast.LENGTH_LONG).show();
}
}
});
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
//Toast.makeText(getApplicationContext(),newText,Toast.LENGTH_SHORT).show();
return false;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this,list.get(position)+"",Toast.LENGTH_SHORT).show();
}
});
}
}
Это класс для моего представления поиска, но проблема в том, что если я выберу оранжевый непосредственно в представлении списка, он будет поджариваться оранжевым и т. д. Но пока я ищу оранжевый, если я дам 'o', он будет отображаться оранжевым в представлении списка, но когда я нажмите оранжевый, он поджарит яблоко. почему это произошло как решить проблему .. заранее спасибо
Не могли бы вы дать полный код




Все, что вам нужно сделать, это отфильтровать результат и проверить новый размер количества элементов. Вы можете использовать вариант фильтра для прослушивания размера списка, если он равен 0, тогда вы можете это сообщение об ошибке.
public boolean onQueryTextSubmit(String query) {
adapter.getFilter().filter(query.trim(), new Filter.FilterListener() {
@Override
public void onFilterComplete(int count) {
if (count==0){
Toast.makeText(MainActivity.this, "No Match found",Toast.LENGTH_LONG).show();
}
}
});
return false;
}
он показывает проблему так же, как указано выше
Удалите
if (list.contains(query)), пусть он фильтрует список массивов от имени запроса.