gpt4 book ai didi

android - 将之前在 GridView 中不可见的元素设置为可见

转载 作者:太空狗 更新时间:2023-10-29 14:29:50 25 4
gpt4 key购买 nike

我有一个 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 并允许附加图标,但我宁愿不这样做......

提前致谢。

最佳答案

我不确定这是否算作您的答案。问题的根源似乎是我们正在使用的 convertView。我没有深入研究 Android 源代码,但我认为无法保证如何重用 View ,即使很明显所有 View 都已经可见并且不应该在幕后重用。

这意味着当我们可视化整个场景时,我们链接到位置 7 的 View 实际上稍后会在位置 0 重用。由于您的代码没有显式地将 View 重置为可见,因此 View 将在设置可见性的情况下重用到 INVISIBLE,因此消失的第一个项目之谜。

最简单的解决方案应该如上面@Vinay 所建议的那样,通过显式设置为 View.VISIBLE。

if ((position == ADDITIONAL_ICON))) {
if (!showAdditionalIcon)
v.setVisibility(View.INVISIBLE);
else
v.setVisibility(View.VISIBLE);
}

希望这对您有所帮助,但我真的希望有 Android 专家来告诉我们更多有关重用旧 View 的整个过程的实际工作原理。

关于android - 将之前在 GridView 中不可见的元素设置为可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com