1

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

                });
4

1 回答 1

0

但是当您选择一个选项来搜索列表时,textfilter 可以过滤条目,但 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 
}     
于 2012-12-26T18:26:32.513 回答