我有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) {}
});
}
}
答案 0 :(得分:0)
您使用的是标准ArrayAdapter。在标准AndroidAdapter的实现中,您可以找到以下代码:
public long getItemId(int position) {
return position;
}
这就是为什么你得到id quals到位。要避免此行为,您必须实现自己的适配器(例如,扩展ArrayAdapter)和覆盖getItemId方法。 或者使用CursorAdapter,它在数据库中使用_id列作为id。