6

カスタム行がカスタムから入力されたリストビューがありますBaseAdaptor。任意の行をクリックすると、新しいを開きますActivity。このリストにフィルター機能を追加するまで、すべてが正常に機能していました。リストを検索してからアイテムをクリックしても、フィルタリングされた結果に関連付けられているアクティビティが開きません。オリジナルリストのその位置にあるアイテムに関連するアクティビティを開きます。

例えば。-元のリスト:AA、BA、CC、DA、ED、FF

検索:'A'フィルタリングされた結果:AA、BA、DA

しかし、アイテムをクリックするとDA、のアクティビティが開きますCC。非常に刺激的です。notifyDataSetChanged()アダプターを呼び出しました。

私はしばらくの間この問題で立ち往生しています。私は本当にそれを解決する方法を知りません。コードがたくさんあり、ここにすべてを入れたくないので、コードを投稿しませんでした。

誰かが私にFILTEREDリストからアイテムを選択する方法のアイデアを与えることができれば..それは素晴らしいことです。

ありがとう!私の質問を理解するために何か他のものが必要かどうか教えてください!

4

3 に答える 3

13

すべてに返信していただきありがとうございますが、問題が見つかりました。

これが他の人に役立つことを願っています。この基本的なものでは、エラーを見つけるのが難しい場合があり、非常に複雑な方法に頼ります!

新しいアクティビティを開始するために、getItem()関数をオーバーライドせずに、カスタムアダプタからアイテムの位置を取得していました。

Object obj = myListAdapter.getItem(position);

関数をオーバーライドします

@Override
public Object getItem(int position) {
    return myList.get(position);
}

そして出来上がり!適切なアクティビティの開始を取得しました。(私が知っているfacepalm ..)とにかくあなたの答えをありがとう!

于 2013-01-28T13:23:11.580 に答える
0

これは、CustomAdapterがフィルタリングされたカーソルではなく最初のカーソルを使用するために発生します

これをアダプタ定義で使用できます:

public Cursor swapCursor(Cursor c1)
{
    super.swapCursor(c1);
    c = c1;
    notifyDataSetChanged();
    return c;

} 

とあなたの呼び出しアクティビティで使用

YourCustomAdapter.swapCursor(FilteredCursor);
于 2013-01-28T13:05:43.510 に答える
0

カスタムSearchViewAdapter(つまり、設定したクラス(context、resource、Arraylist))で、SearchViewAdapterに渡される元のArrayListを格納するメソッドを作成し、元の位置を取得するメソッドを作成できます。 listViewから選択したオブジェクトの:

 //in your custom SearchViewAdapter create methods store() and getPos() 

public void store(ArrayList<SearchViewClass>originalList){
   mylist=new ArrayList<>(originalList);
      }  //The store method should be called once in searchView Activity when you pass all needed values into your Arraylist            


public int getPos(Object obj){
    return mylist.indexOf(obj);
}

次に、SearchViewアクティビティまたはsearchViewを実装している場所で、listView.setOnItemClickListenerで、adapterView.getItemAtPosition(i)をパラメーターとして受け取るgetpos(adapterView.getItemAtPosition(i))メソッドを呼び出します。getpos()メソッドは、searchViewによって引き起こされたフィルタリングに関係なく、元のオブジェクト位置のインデックスを返します。次に、インデックスでswitch()を実行できます。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
 switch (searchViewAdapter.getPos(adapterView.getItemAtPosition(i))){
               case 0:...break}
}
于 2020-01-14T03:04:25.323 に答える