过滤列表后,OnItemClickListener中的ID不正确

时间:2012-12-26 17:55:16

标签: android filter android-listview onitemclicklistener

我正在使用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) {
                            ;
                        }
                    }

                });

1 个答案:

答案 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 
}