1

listView の更新に関連して多くの質問があることは知っていますが、私の問題に答えている人はいません (私が知る限り)。

リスト ビューでアイテムをクリックすると、アイテム ビューを変更しようとしています。

boolean isClickedPOJOにあるビューを変更するには:

        networksListView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> _adapter, View view, int pos, long id) {
            myApp.networksGlobal.networks.get(pos);
            myApp.networksGlobal.networks.get(pos).isClicked = !myApp.networksGlobal.networks.get(pos).isClicked;
            adapter.notifyDataSetChanged();
        }
    });

アイテムをクリックすると、isClickedtrue から false にgetView切り替わり、listAdapted でビュー タイプが切り替わります。

    @Override
public View getView(int position, View convertView, ViewGroup parent) {

    Network network = (Network) getItem(position);
    NetworkItemView networkItemView;
    if (convertView == null) {
        networkItemView = NetworkItemView_.build(context);
    } else {
        networkItemView = (NetworkItemView) convertView;
    }
    networkItemView.bind(network);
    if (network.isClicked) {
        networkItemView.networkItemButtonLayout.setVisibility(View.VISIBLE);
    } else {
        networkItemView.networkItemButtonLayout.setVisibility(View.GONE);
    }
    return networkItemView;

}

最初のクリックですべてがうまく機能し、トーストが表示され、レイアウトnetworkItemButtonLayoutが表示されるように設定されます。

しかし、同じ項目をもう一度クリックすると、何も起こりません。トーストは表示されず、レイアウトの可視性に変更はありません。

コメントadapter.notifyDataSetChanged()すると、クリックごとにトーストが表示されます。問題は、なぜadapter.notifyDataSetChanged(). adapter.notifyDataSetChanged()そのため、いくつかの回避策(および)を試しましnetworksSearchListView.invalidateViews()たが、何もうまくいかず、アイテムを何度もクリックする方法が見つかりません。

「notifyDataSetChanged」を適切な方法で使用していますか?

4

0 に答える 0