listView の更新に関連して多くの質問があることは知っていますが、私の問題に答えている人はいません (私が知る限り)。
リスト ビューでアイテムをクリックすると、アイテム ビューを変更しようとしています。
boolean isClicked
POJOにあるビューを変更するには:
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();
}
});
アイテムをクリックすると、isClicked
true から 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」を適切な方法で使用していますか?