0

現在、複数の選択をサポートするために ArrayAdapter によって管理されるすべての項目で ListView と CheckedTextView を使用するアプリケーションを開発しています。私の ListView のコンテンツは動的です。つまり、実行時に変更できます。ここで、 ListView.getCheckedItemPositions() を使用してすべてのチェック済みアイテムを取得しようとしました。これは、チェック済みのすべての位置を保存し、ユーザーがこのページに再び戻ったときにそれらを自動チェックするためです。そのため、すべてのページのチェック結果を保存する必要があります。

最初のページでは、すべてが正常に機能します。しかし、ユーザーが別のページに移動していくつか選択すると、ListView が返す結果の配列には、チェックされない位置が含まれます。ListView がこの奇妙な動作をする理由はわかりません。実際にはチェックが行われていないページでも、ListView は 1 つの項目がチェックされていることを示す結果を返します。

OnClickListener コールバックで CheckedTextView の位置を取得する方法を教えてくれる人はいますか?

サンプルコードは大歓迎です。

前もって感謝します...

4

1 に答える 1

3

リストビューはそのビューをリサイクルするため、別のページに移動してから前のページに戻ると、リストビューはそのビューの getView() 関数を呼び出します。チェックされたビューの順序が混同されないようにするには、アダプターを初期化する前に、すべてのビューのチェック状態を含む配列リストを作成します。次に、arraylist をアダプターのコンストラクターの引数として渡します。getView() 関数で、arraylist に基づいて、チェック可能な各テキストビューのチェック状態を設定します。次に、アクティビティ クラスに戻り、onItemClick() イベントをオーバーライドします。関数が呼び出されたときに提供されるビューを使用して、次の手順を実行してチェック可能なテキストビューを取得し、そのチェック状態を設定します。

listView1.setOnItemClickListener(new OnItemClickListener() 
{
    @Override
    public void onItemClick(AdapterView<?> arg0, View selectedView, int position , long id)
    {
        CheckedTextView tv = (CheckedTextView)selectedView.findViewById(R.id.textview);
        if (tv.isChecked())
        {
            tv.setChecked(false);
            checkStatesOfViews.get(position) = false;
        }
        else
        {
            tv.setChecked(true);
            checkStatesOfViews.get(position) = true;
        }

} });

于 2011-07-19T21:09:42.100 に答える