Android 在ListView中搜索,获取id时的结果不正确

Android 在ListView中搜索,获取id时的结果不正确,android,listview,search,Android,Listview,Search,我有一个搜索ListView的活动。当我返回任何我不使用过滤器的结果时,一切都很好。选择元素520,我得到它的id,但一旦我使用过滤器并找到相同的项目,就得到id 0-10。请告诉我如何解决这个问题。提前谢谢! 附笔。 我为我的英语感到抱歉 public class Clients extends Activity { private ListView lv; ArrayAdapter<String> adapter; EditText etInputSearch; DB d

我有一个搜索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) {}
    });
}
公共类客户端扩展活动{
私有ListView lv;
阵列适配器;
编辑文本搜索;
DB-dbSync;
数据库用户;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.clients);
dbSync=新的数据库(本);
dbUser=新数据库(此数据库);
lv=(ListView)findViewById(R.id.list\u视图);
etInputSearch=(EditText)findViewById(R.id.etInputSearch);
adapter=new ArrayAdapter(这个,R.layout.clients_项,R.id.clients_名称,dbSync.createlistClients(dbUser.getCodeAgent());
低压设置适配器(适配器);
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共空间单击(适配器视图l、视图v、内部位置、,
长id){
Log.d(“标签”,位置+“”+id);
}
});
etInputSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、int arg3){
Clients.this.adapter.getFilter().filter(cs);
}
@凌驾
public void beforeTextChanged(字符序列arg0、int arg1、int arg2、int arg3){}
@凌驾
public void posterextchanged(可编辑arg0){}
});
}

}您使用的是标准阵列适配器。在标准AndroidAdapter的实现中,您可以找到以下代码:

public long getItemId(int position) {
        return position;
    }
这就是为什么你的身份证能胜任这个职位。为了避免这种行为,您必须实现自己的适配器(例如扩展ArrayAdapter)并重写getItemId方法。 或者使用CursorAdapter,它使用数据库中的_id列作为id