2013-07-03 7 views
0

Я фильтрую список, что он работает правильно. Но когда я нажимаю элемент отфильтрованного списка, он дает мне имя элемента в исходной позиции.Filtered Listview возвращает исходную позицию

Пример: элементов: А, В, С, D, E. Если я фильтр C, он возвращает только один элемент (C), но он показывает, потому что это положение 0.

Я был ищу информацию, но ни один из подобных вопросов не помог мне.

Это мой код:

final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls); 
list.setOnItemClickListener(new OnItemClickListener() { 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    // TODO Auto-generated method stub 
    addProfile.setMLSId(mlslist.get(position).getId()); 


    // THIS IS THE LINE THAT GIVES ME THE WRONG RESULT!!! 
    textmls.setText(mlslist.get(position).getName()); 


    mls.setText(""); 
    dialog.dismiss(); 
} 
}); 
list.setAdapter(adapter); 

final EditText filter = (EditText) inflated.findViewById(R.id.et_filter); 
filter.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     adapter.getFilter().filter(s); 
     adapter.notifyDataSetChanged(); 
    } 
}); 

И FIlteredListViewAdapter:

public class FilteredListviewAdapter extends ArrayAdapter<String> { 

ArrayList<String> list; 

public FilteredListviewAdapter(Context context, int layout, ArrayList<String> array) { 
    super(context, layout, array); 
    list = array; 
} 

@Override 
public String getItem(int position) { 
    return super.getItem(position); 
} 

}

Что я делаю неправильно?

ответ

0

getItem должен возвратить деталь внутри набора данных в позиции:

@Override 
public String getItem(int position) { 
    return list.get(position); 
} 
+0

Я пытался что потому что я вижу это в комментарии в другом вопросе, но он не работает. Если я поставлю это предложение, список не будет правильно фильтроваться. Я всегда получаю N первых элементов исходного списка (в зависимости от того, что я фильтрую). Если есть один элемент, который выполняет фильтр, тогда отображается элемент 0 исходного списка. Если есть 2 элемента, отображаются 2 первых элемента списка оргиналов. И так далее. – trumpetero

1

Я наконец нашел решение.

Код адаптера в порядке, как я его написал.

Единственные линии я Изменились в OnItemClickListener, так что теперь код выглядит так:

final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls); 
    list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // TODO Auto-generated method stub 
      addProfile.setMLSId(mlslist.get(arraymls.indexOf(adapter.getItem(position))).getId()); 
      textmls.setText(adapter.getItem(position)); 
      mls.setText(""); 
      dialog.dismiss(); 
     } 
}); 
list.setAdapter(adapter); 

Теперь вызовите функцию adapter.getItem вместо list.get

Смежные вопросы