【发布时间】:2011-11-11 12:12:03
【问题描述】:
我有一个 GridView,我希望在其中始终显示 7 个图标,有时还会根据请求显示一个附加图标。一开始,附加图标从未显示。这是结构:
0 1 2
3 4 5
6 [7]
所有图标都适合屏幕,所以我不需要/有滚动。每个图标由一个图像和一个文本组成。
为此,我有一个扩展 BaseAdapter 的 CustomAdapter。我已经覆盖了 getView 方法,在该方法中我为每个图标设置了文本和图像。
public View getView(int position, View convertView, ViewGroup parent) {
View v = null;
if (convertView == null) {
LayoutInflater li = ((Activity) context).getLayoutInflater();
v = li.inflate(R.layout.icon, null);
} else {
v = convertView;
}
TextView tv = (TextView) v.findViewById(R.id.icon_textView);
tv.setText(position);
ImageView iv = (ImageView) v.findViewById(R.id.icon_ImageView);
iv.setImageResource(imageResourcesArray[position]);
if ((position == ADDITIONAL_ICON)) && !showAdditionalIcon) {
v.setVisibility(View.INVISIBLE);
}
return v;
}
imageResourcesArray[] 是一个包含图像资源的整数数组。
CustomAdapter 中的其他函数和变量是:
public static final int ADDITIONAL_ICON = 7;
private boolean showAdditionalIcon = false;
public showAdditionalIcon(){
this.showAdditionalIcon = true;
notifyDataSetChanged();
// notifyDataSetInvalidated();
}
public hideAdditionalIcon(){
this.showAdditionalIcon = false;
notifyDataSetChanged();
// notifyDataSetInvalidated();
}
稍后,我从一个扩展 Activity 的类(比如 ClassA)创建 CustomAdapter 并将其设置为 GridView:
GridView grid = (GridView) findViewById(R.id.main_gridView);
customAdapter = new CustomAdapter(this);
grid.setAdapter(customAdapter);
在对服务器进行一些计算和请求后,我的问题出现了,我必须显示附加图标(数字 7)。所以我打电话(来自ClassA):
customAdapter.showAdditionalIcon();
现在,出现了附加图标,但第一个图标消失了……我尝试使用 notifyDataSetInvalidated() 和 notifyDataSetChanged(),但结果相同。
当然,我可以生成一个新的CustomAdapter 并允许附加图标,但我不希望这样做...
提前致谢。
【问题讨论】:
-
v.setVisibility(View.INVISIBLE);而不是这个尝试 v.setVisibility(View.GONE);其次,当你需要展示它时 view.setVisibility(View.VISIBLE);
-
但如果我按照您的建议执行此操作,我应该将图标 7 的视图保存在一个变量中,不是吗?现在,我不保存任何视图,因此 BaseAdapter 应该知道何时更新/重新生成所有图标。
-
我终于按照你的建议做了。我删除了 notifyDataSetInvalidated() 和 notifyDataSetChanged() 调用,效果很好。谢谢!
-
请检查我的回答,它会有所帮助。 [1]:stackoverflow.com/questions/8933776/…
标签: android gridview baseadapter