在ListView中搜索,获取id onItemClick上的结果不正确

时间:2014-04-23 15:04:01

标签: android listview search

我有Activiti,其中搜索ListView。当我返回任何我不使用过滤器的结果时,一切都很好。选择元素520,我得到它的id,但是一旦我使用过滤器并找到相同的项目,得到id 0-10。请告诉我如何解决这个问题。提前致谢! 附: 我很抱歉我的英语!

public class Clients extends Activity {

private ListView lv;

ArrayAdapter<String> adapter;
EditText etInputSearch;
  DB dbSync;
  DB dbUser;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.clients);
    dbSync = new DB(this);
    dbUser = new DB(this);

    lv = (ListView) findViewById(R.id.list_view);
    etInputSearch = (EditText) findViewById(R.id.etInputSearch);
    adapter = new ArrayAdapter<String>(this, R.layout.clients_item, R.id.clients_name, dbSync.createlistClients(dbUser.getCodeAgent()));
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> l, View v, int position,
                long id) {
            Log.d("TAG", position + " " + id);

        }
        });

    etInputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            Clients.this.adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {}
        @Override
        public void afterTextChanged(Editable arg0) {}
    });
}

}

1 个答案:

答案 0 :(得分:0)

您使用的是标准ArrayAdapter。在标准AndroidAdapter的实现中,您可以找到以下代码:

public long getItemId(int position) {
        return position;
    }

这就是为什么你得到id quals到位。要避免此行为,您必须实现自己的适配器(例如,扩展ArrayAdapter)和覆盖getItemId方法。 或者使用CursorAdapter,它在数据库中使用_id列作为id。