3

いくつかの基準に応じて、ListView でいくつかの項目を非表示にしたいと考えています。2 つの解決策を見つけましたが、どれも機能しません。Viewメソッドから空を返そうとしましgetItem()たが、仕切りがまだ表示されています。したがって、たとえばすべてのアイテムを非表示にすると、仕切りが大量に積み重なってしまいます。2つ目は、メソッドを設定View.GONEするgetItem()ことでした。しかし、ListView はまだ非表示のアイテムの場所を予約しているため、リストに空のビューが表示されます。この質問の回避策を見つけた人はいますか?

編集:また、データセットからデータを削除できないことに注意する必要があります。Adapter/ListView は、指定されたアイテムのみを非表示にする必要があります。

4

3 に答える 3

10

これを次の方法で実装します。

  1. 非表示にするアイテムのインデックスを保持するリスト/配列をアダプター内に作成します。

    例えば:

    List<Integer> hiddenItems;
    
  2. アダプタgetCount()メソッドをオーバーライドして、リスト内のアイテム数から手順 1 で説明したコレクション内のアイテム数を引いた値を返します。

    例えば:

    @Override
    public int getCount() {
        return items.size() - hiddenItems.size();
    }
    
  3. getItem()手順 1 のコレクションに含まれるインデックスによってオフセットされたアイテムを返すようにオーバーライドします。

    例えば:

    @Override
    public Object getItem(int position)
    {
        for (Integer hiddenIndex : hiddenItems) {
            if(hiddenIndex <= position)
                position++;
        }
    
        // Now your regular getItem code...
    }
    
于 2013-09-12T18:42:56.993 に答える
6

アップデート:

はいadd/remove、アダプターにデータを提供した後でも可能です。一部にデータを格納しArrayList<type>、カスタム アダプター クラスに渡します。

ArrayList<String> dataList;

// store data in dataList 
list.setAdapter(CustomAdapter(YourClass.this, dataList));

最も簡単な回避remove策は、ListView のアダプターからこれらのアイテムを呼び出してnotifyDataSetChanged(). これはremove the cells/row、リストからのそれらのアイテムになります。

 adapter.remove(object);
 adapter.notifyDataSetChanged(); // this will update your ListView

これらのアイテムを将来リストで再度使用する予定がある場合は、それらを別の場所に保存します。たとえば、ファイルまたはデータベースの中で、ニーズに最も適した場所に保存します。

于 2013-09-12T18:43:38.817 に答える
1

あなたの最善の策は、使用しているListAdapterを拡張し、特定の行を非表示にして調整するためのメソッドを追加することですgetCount()。または、WrapperListAdapterここと行を非表示にする必要があるときはいつでも未来。

于 2013-09-12T18:43:28.957 に答える