我知道他们对于刷新 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;
}
在第一次单击时,一切正常,显示 Toast 并且布局networkItemButtonLayout
设置为可见。
但是,如果我在同一个项目上单击第二次:什么都没有发生。没有显示 Toast,并且布局可见性没有变化。
如果我评论adapter.notifyDataSetChanged()
,每次点击都会显示 Toast。所以我想问题是为什么调用adapter.notifyDataSetChanged()
. 所以尝试了几种解决方法 (adapter.notifyDataSetChanged()
和networksSearchListView.invalidateViews()
) 但没有任何效果,而且我找不到在我的项目上单击几次的方法。
我是否以正确的方式使用“notifyDataSetChanged”?