1

ここに私の問題があります: 複数の行を持つリストビューがあります。行には単一のタイプの listadapter があります (ただし、行にはいくつかのタイプがあります)。ユーザーが行を選択した場合、別の行を選択解除する必要があります。行を選択する方法は、行の種類によって異なります。edittext フィールドなどに何かが書き込まれている場合、一部の行が選択されます。行選択アルゴリズムは listadapter クラス内にある必要があります。

私が使用した解決策の 1 つは、getView() 行の初期化部分で「選択」表示アルゴリズムを使用し、行が選択されたときに、リストビュー全体を更新する通知を呼び出すことthis.notifyDataSetChanged();です。もちろん、これはコストがかかりすぎて、まったく別の問題を引き起こします。

そのため、カスタム アダプター クラス内からリストビュー内の他の行を更新する方法が必要です。現在選択されている行の「兄弟」にアクセスするにはどうすればよいですか?

どんな入力でも大歓迎です!ありがとう!

4

1 に答える 1

1

さて、私の鋭い同僚、私はあなたの問題に対する解決策を見つけたと思います:

カスタム アダプタのコンストラクタとして必要な listView を使用してください。

したがって、カスタムアダプターでは、コンストラクターは次のようになります。

    public SubEventListAdapter(Context context, ArrayList<MobileSubEvent> items,  MobileSubActivity parentSubActivity, ListView listView)
        {
            super(context, R.layout.view_select_event_item, items);
            this._items = items;
            this._context = context;
            this.parentSubActivity = parentSubActivity;
            this.listView = listView;
        }

アクティビティでは、次のようにアダプターを設定します。

listView.setAdapter(new SubEventListAdapter(listView.getContext(), subActivity.get_subEventsList(), subActivity, listView));

これで、アダプターで listView を自由に使用できます。例えば:

    private void AddAllDots()
    {
        for(int i = 0 ; i< listView.getChildCount(); i++)
        {
            View v = listView.getChildAt(i);
            ImageView dots = (ImageView) v.findViewById(R.id.ivMandSelection);
            dots.setVisibility(View.VISIBLE);
        }
    }
于 2013-08-16T09:15:05.597 に答える