Не отображается правильный элемент Listview в Searchview

 <?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', он будет отображаться оранжевым в представлении списка, но когда я нажмите оранжевый, он поджарит яблоко. почему это произошло как решить проблему .. заранее спасибо

Удалите if (list.contains(query)), пусть он фильтрует список массивов от имени запроса.

ADM 30.03.2021 14:27

Не могли бы вы дать полный код

ACHU 30.03.2021 15:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
40
1

Ответы 1

Все, что вам нужно сделать, это отфильтровать результат и проверить новый размер количества элементов. Вы можете использовать вариант фильтра для прослушивания размера списка, если он равен 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;
}

он показывает проблему так же, как указано выше

ACHU 31.03.2021 07:42

Другие вопросы по теме