Фильтр в андроиде занимает неправильную позицию

Я пытаюсь отсортировать список по EditText, используя фильтр в адаптере.

Фильтр обрабатывается хорошо, но позиция щелчка по списку всегда постоянна.

то есть ListView получает фильтр, но после выбора элемента он занимает ту же позицию в представлении списка.

Первый экран выглядит так, и когда при выборе албании албания отображается правильно, но когда после сортировки выбирается behrain, и отображается та же албания, поскольку в списке отображается позиция 0, как исправить эту проблему.

когда выбрана Албаниякогда выбрана албания После сортировки и выбора будет выбрана та же албания

Часть кода в адаптере:

@Override
public Filter getFilter() {

    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,
                FilterResults results) {

            country_inf = (ArrayList<CustomCountryCodesPojo>) results.values;
            notifyDataSetChanged();
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            FilterResults results = new FilterResults();
            ArrayList<CustomCountryCodesPojo> FilteredArrayNames = new ArrayList<CustomCountryCodesPojo>();

            if (mOriginalNames == null) {
                mOriginalNames = new ArrayList<CustomCountryCodesPojo>(
                        country_inf);
            }
            if (constraint == null || constraint.length() == 0) {
                results.count = mOriginalNames.size();
                results.values = mOriginalNames;
            } else {
                constraint = constraint.toString().toLowerCase();
                for (int i = 0; i < mOriginalNames.size(); i++) {
                    CustomCountryCodesPojo dataNames = mOriginalNames
                            .get(i);
                    if (dataNames.countryName.toString().toLowerCase()
                            .contains(constraint.toString())) {
                        FilteredArrayNames.add(dataNames);
                    }
                }

                results.count = FilteredArrayNames.size();
                // System.out.println(results.count);

                results.values = FilteredArrayNames;
                // Log.e("VALUES", results.values.toString());
            }

            return results;
        }
    };

    return filter;
}

Моя проблема в том, что в элементе списка нажмите после некоторого поиска, который он берет с первой позиции

Код клика ListView

lv_list.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Intent i = new Intent();
            i.putExtra("flagId", flagId);
            i.putExtra("name", allRecords.get(arg2).countryName);
            setResult(RESULT_OK, (i).setAction("ok"));
            finish();

        }
    });

person Kartheek s    schedule 16.11.2013    source источник
comment
Так что с фильтрацией все в порядке. Но на элементе Click возникают проблемы с этими строками. i.putExtra("flagId", flagId); i.putExtra("name", allRecords.get(arg2).countryName);. Верно?   -  person Nizam    schedule 16.11.2013
comment
Я передаю эти значения другому макету. здесь arg2 равен 1 в обоих случаях, поэтому значение остается одинаковым. Как этого избежать.   -  person Kartheek s    schedule 16.11.2013
comment
stackoverflow.com/a/8678198/726863   -  person Lalit Poptani    schedule 22.11.2013


Ответы (1)


Это распространенная проблема при использовании фильтра для списка.

Например:
Проблема:

  • Перед фильтрацией
    ArrayList-->[AA,BB,AC]
    List-->
    AA
    BB
    AC

  • После фильтрации
    ArrayList-->[AA,BB,AC]
    List-->
    AA
    AC

Таким образом, при использованииarg2(позиция) после фильтрации, если вы нажмете «AC», arraylist.get(arg2) вернет «BB».

Решение:

Вместо этого используйте arg1(Просмотр). Это текущий элемент View с одной строкой, который вы щелкнули.


Я думаю, вы используете ImageView и TextView для пользовательской строки списка. Затем для названия страны я буду кодировать как

((TextView)arg1.findViewById(R.id.textview1)).getText.toString()
person Nizam    schedule 16.11.2013