Android 不可见的 ListView 项
Android invisible ListView item
我有 ListView
并且我想隐藏一些项目,我使用 view.setVisibility(View.INVISIBLE)
并且效果很好,但是当 ListView
有很多项目并且我滚动然后在几个项目之后再次是隐形物品。
适配器:
public void setIndexHidenItem(int index){
indexHidenItem = index;
}
public View getView(final int index, View view, ViewGroup group) {
if (view == null) {
view = LayoutInflater.from(mainContext).inflate(R.layout.hlist_item_template, null);
}
更改可见性:
if (indexHidenItem != -1){
if (index == indexHidenItem){
if (view.getVisibility() == View.VISIBLE) {
view.setVisibility(View.INVISIBLE);
}
}else{
if (view.getVisibility() == View.INVISIBLE){
view.setVisibility(View.VISIBLE);
}
}
}
当您隐藏项目时,您应该记住哪个项目是不可见的,并且在您的适配器的 getView()
方法中,您应该检查当前项目是否应该可见并再次设置可见性。这是因为您的列表视图重用了它的项目,而传递给您的 getView()
方法的 convertView
实际上是您之前初始化的项目之一
原因:
这是一个传统的错误。您正在使用 ViewHolder 模式,该模式为多个列表视图项目重用相同的视图,并且您以某种方式获取视图并更改其属性,这将反映在再次重用该视图的每个列表视图项目上。
解法:
您应该在适配器的数据存储(ArrayList、HashMap、SparseArray 等)中记录此视图不可见并调用适配器的 notifyDataSetChanged() 并且在适配器的 getView()
中您将需要检查可见性并在此基础上进行更改。
您可以在适配器内部使用 getItemViewType()
。 This example 向您展示如何使用它。但是你可以隐藏它而不是改变视图。这样它就不会 show/hide 查看它不应该
我有 ListView
并且我想隐藏一些项目,我使用 view.setVisibility(View.INVISIBLE)
并且效果很好,但是当 ListView
有很多项目并且我滚动然后在几个项目之后再次是隐形物品。
适配器:
public void setIndexHidenItem(int index){
indexHidenItem = index;
}
public View getView(final int index, View view, ViewGroup group) {
if (view == null) {
view = LayoutInflater.from(mainContext).inflate(R.layout.hlist_item_template, null);
}
更改可见性:
if (indexHidenItem != -1){
if (index == indexHidenItem){
if (view.getVisibility() == View.VISIBLE) {
view.setVisibility(View.INVISIBLE);
}
}else{
if (view.getVisibility() == View.INVISIBLE){
view.setVisibility(View.VISIBLE);
}
}
}
当您隐藏项目时,您应该记住哪个项目是不可见的,并且在您的适配器的 getView()
方法中,您应该检查当前项目是否应该可见并再次设置可见性。这是因为您的列表视图重用了它的项目,而传递给您的 getView()
方法的 convertView
实际上是您之前初始化的项目之一
原因:
这是一个传统的错误。您正在使用 ViewHolder 模式,该模式为多个列表视图项目重用相同的视图,并且您以某种方式获取视图并更改其属性,这将反映在再次重用该视图的每个列表视图项目上。
解法:
您应该在适配器的数据存储(ArrayList、HashMap、SparseArray 等)中记录此视图不可见并调用适配器的 notifyDataSetChanged() 并且在适配器的 getView()
中您将需要检查可见性并在此基础上进行更改。
您可以在适配器内部使用 getItemViewType()
。 This example 向您展示如何使用它。但是你可以隐藏它而不是改变视图。这样它就不会 show/hide 查看它不应该