我知道他们相对于刷新listView有很多问题,但是没有一个能解决我的问题(据我所知)。
我在列表视图中点击它时尝试更改项目视图。
要更改视图,我的POJO上有boolean isClicked
:
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;
}
在第一次点击时,一切都运行良好,显示Toast,布局networkItemButtonLayout
设置为可见。
但如果我再次点击同一项目:没有任何事情发生。没有显示Toast,也没有更改布局可见性。
如果我评论adapter.notifyDataSetChanged()
,则每次点击都会显示Toast。所以我想问题就是调用adapter.notifyDataSetChanged()
的原因。所以尝试了几种解决方法(adapter.notifyDataSetChanged()
和networksSearchListView.invalidateViews()
),但没有办法解决问题,而且我无法找到在项目上点击几次的方法。
我是否正确使用'notifyDataSetChanged'?