我正在使用ListView来显示mysql表中的一些数据,并使用SimpleAdapter填充它。我添加了onItemClickListener,以便在用户按下列表中的某个项目时能够打开新活动。这非常有效,但是当您选择搜索列表的选项时,textfilter正在过滤条目,但是onItemClick没有向新活动发送正确的“id”。我搜索了解决方案,每个人都用“adapter.notifyDataSetChanged”来解决问题,但它对我不起作用。这是代码,也许有人可以提供帮助。
list.setTextFilterEnabled(true);
myFilter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
}
public void beforeTextChanged(CharSequence s, int start,int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
mSchedule.getFilter().filter(s.toString());
}
});
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
try {
String ajdi = jArray.getJSONObject(position).getString("id").toString();
Intent i = new Intent(Predlozi.this, PesmaPrikaz.class);
Bundle bandl = new Bundle();
bandl.putString("id", ajdi);
i.putExtras(bandl);
startActivity(i);
} catch (JSONException e) {
;
}
}
});
答案 0 :(得分:0)
但是当你选择一个搜索列表的选项时,textfilter就是 过滤条目ok但onItemClick没有发送正确的“id” 参加新活动。
这是一种正常行为,因为您很可能直接从用于填充适配器的list / json结构中获取id。如果您然后过滤列表并且过滤删除项目,则位置将不正确,因为列表中的元素较少。
相反,您应该从适配器获取行数据并从那里获取id
,假设您确实将其放在那里(您肯定应该这样做):
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
HashMap<Something, Something> rowData = (HashMap<Something, Something>)((SimpleAdapter)parent.getAdapter()).getItem(position); // I don't know what you pass to the adapter so edit this
// get the id from the `HashMap` above
// if you don't store the id in there, then edit your code to do this:
String id = rowData.get("the_key_for_the_Id");
// send the Intent
}