2016-05-02 10 views
0

現在、このメソッドを使用してリストの結果をフィルタリングしています。私はデータを表示するスピナーを持っている、私はリストビューを選択されたデータでフィルタリングしたい。スピンナーでアイテムを選択したときのリストビューの更新

String[] finalArray = new String[gameData.size()]; 
    finalArray = gameData.toArray(finalArray); 
     // finalArray contains the selection for the spinner 
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, finalArray); 

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      selection = (String)spinner.getSelectedItem(); 
      for(String str: oldList) { 
       if(str.trim().contains(selection)) 
        gameData.add(str); 
      } 
      finalArray = new String[gameData.size()]; 
      finalArray = gameData.toArray(finalArray); 
      arrayAdapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

私は選択がなされているが、それは現在、何もしません一度listView.setAdapter(arrayAdapter)は、リストを更新すると仮定。

選択内容を文字列に設定しました。次に、oldListに文字列選択が含まれているかどうかを確認します。次に、oldListを通過してselectionと一致する場合は、gameData(フィルタリングされた結果と見なされます)という新しいリストに入れます。それが配列に変換され、一致する場合はリストビューにロードされます。

+0

'finalArray = gameData.toArray(finalArray);'行は何をしますか?空の配列(finalArray)をArrayAdapterに渡しているようですね? 'gameData'の内容を表示してください。 – ishmaelMakitla

+0

'gameData'はリストです。私はこのコードの前にいくつかの文字列を分割します。 'gameData 'の内容は' finalArray'の配列に変換されます。空の配列ではありません。 – Jed5931

+0

@ishmaelMakitla質問を更新しました – Jed5931

答えて

1

onItemSelectedListenerの外側にアダプタを設定し、スピナー項目が選択されている場合はnotifyDataSetChangedに電話してください。

String[] finalArray = new String[gameData.size()]; 
finalArray = gameData.toArray(finalArray); 

// finalArray contains the selection for the spinner 
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, finalArray); 

// Set the adapter here 
listView.setAdapter(arrayAdapter); 

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     // TODO: Change the elements of finalArray here 
     arrayAdapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 
}); 

// TODO:の部分を確認してください。

ここでfinalArrayを変更する必要があります。 finalArrayの変更が完了した、つまり新しい要素がfinalArrayに追加されたら、notifyDataSetChangedに電話して、あなたのリストに反映された変更を確認します。

+0

これはまだ動作しません。それ以上の助けがあれば質問を更新しました。 – Jed5931

+0

私はあなたの更新されたコードを見て、私のコードセグメントが動作するはずです。私はとにかく詳細を追加しています。 –

+0

私はあなたが何を意味するか知っていると思います。私はちょうどそれを試して、上記のコードを更新しました。私は正しい線に沿っているのかどうかはわかりませんが、まだ更新していません。 – Jed5931

0

新しいアダプタを設定する前に、listview.setListAdapter(null)またはlistview.removeAll()を呼び出すことをお勧めします。

0

私はこれがあなたのために働くべきだと思う:ArrayAdapterは、データパラメータとしてもリストを受け入れるとき

また
String[] finalArray = new String[gameData.size()]; 
    finalArray = gameData.toArray(finalArray); 
     // finalArray contains the selection for the spinner 
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, finalArray); 
    listView.setAdapter(arrayAdapter); 
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      selection = (String)spinner.getSelectedItem(); 
      for(String str: oldList) { 
       if(str.trim().contains(selection)) 
        gameData.add(str); 
      } 
      finalArray = new String[gameData.size()]; 
      finalArray = gameData.toArray(finalArray); 
      arrayAdapter.clear(); 
      arrayAdapter.addAll(finalArray); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

、なぜあなたは配列に変換するのですか?リストの場合、このフォームの何かもあなたのために働くはずです:

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, gameData); 
    listView.setAdapter(arrayAdapter); 
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      selection = (String)spinner.getSelectedItem(); 
      for(String str: oldList) { 
       if(str.trim().contains(selection)) 
        arrayAdapter.add(str); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 
+0

ありがとうございました。私はJavaでわずか1週間しか作業していませんでしたが、どういうわけかArrayAdaptersは配列だけを取ると思っていましたが、それを明確にすることに感謝します。 – Jed5931

関連する問題