Недействительная страница результатов при нажатии на элемент результатов поиска - PullRequest
0 голосов
/ 24 августа 2018

Пользовательский класс ArrayList

ArrayList<ItemClass> nomenclatureList

Для него есть onItemClickListener

   listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        ItemClass word = nomenclatureList.get(position);
        int singleImg = word.getImageResourse();
        String singleName = word.getNomenclatureName();
        String singleWeight = word.getNomenclatureWeight();
        String singleBrand = word.getNomeclatureBrand();
        String singleBar = word.getNomenclatureBarCode();
        String singlePercent = word.getNomenclaturePercent();
        String singleComposition = word.getNomenclatureComposition();
        String singlePack = word.getNomenclaturePack();
        Intent intent = new Intent(ItemListGKI.this, ItemSingle.class);
        intent.putExtra("SINGLE_IMG_KEY", singleImg);
        intent.putExtra("SINGLE_NAME_KEY", singleName);
        intent.putExtra("SINGLE_WEIGHT_KEY", singleWeight);
        intent.putExtra("SINGLE_BRAND_KEY", singleBrand);
        intent.putExtra("SINGLE_BAR_KEY", singleBar);
        intent.putExtra("SINGLE_PERCENT_KEY", singlePercent);
        intent.putExtra("SINGLE_COMPOSITION_KEY", singleComposition);
        intent.putExtra("SINGLE_PACK_KEY", singlePack);
        startActivity(intent);
    }
});

И есть код для поиска из этого ArrayList

    @Override
        public boolean onQueryTextChange(String newText) {
            boolean success = false;
            ArrayList<String> tempList = new ArrayList<>();
            for(ItemClass temp : nomenclatureList){
                if(temp.getNomenclatureName().toLowerCase().contains(newText.toLowerCase())){
                    tempList.add(temp.getNomenclatureName());
                    ArrayAdapter<String> adapter = new ArrayAdapter<>(ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
                    listView.setAdapter(adapter);
                    tempList.size();
                    success = true;
                }
            }
        return success;
    }

И когда я нажимаю на результат поиска, открывается активность с неверной информацией. Если я нажимаю на элемент без поиска - все в порядке.

Я не знаю, что я должен сделать, чтобы это исправить.

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Заменить это:

ItemClass word = nomenclatureList.get(position);

с этим

ItemClass word = (ItemClass) adapterView.getItemAtPosition(position);

Почему? потому что nomenclatureList содержит данные, отличные от установленного адаптера, когда вы искали или фильтровали данные, поэтому nomenclatureList.get(5), например, отличается от (ItemClass) adapterView.getItemAtPosition(position);

Теперь в onQueryTextChange вы должны поместить:

 @Override
        public boolean onQueryTextChange(String newText) {
            boolean success = false;
            ArrayList<ItemClass> tempList = new ArrayList<>();
            for(ItemClass temp : nomenclatureList){
                if(temp.getNomenclatureName().toLowerCase().contains(newText.toLowerCase())){
                    tempList.add(temp);
                }
            }
             ArrayAdapter<String> adapter = new ArrayAdapter<>(ItemListGKI.this, android.R.layout.simple_list_item_1, tempList);
             listView.setAdapter(adapter);
             tempList.size();
             if(tempList.size() > 0){
                success = true;
            }
        return success;
    }
0 голосов
/ 24 августа 2018

Согласно определенному здесь API -> https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener

onItemClick(AdapterView<?> adapterView, View view, int position, long id)

Ваш код рассматривает position для получения элемента, по которому щелкают. Я считаю, что это должен быть идентификатор. Попробуйте заменить

ItemClass word = nomenclatureList.get(position);

с

ItemClass word = nomenclatureList.get(id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...