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 に答える