gpt4 book ai didi

android - 为什么 GridView 中的适配器不更新其内容?

转载 作者:行者123 更新时间:2023-11-29 00:07:57 25 4
gpt4 key购买 nike

我有一个树结构,其中如果节点有子项则为类别,否则为项目。我使用 gridView 和自定义适配器绘制了顶级类别。我注册了一个点击事件处理程序,我在其中更改了树的级别并通知 gridView 数据已更改。

fragment :

gridview = (GridView) findViewById(R.id.gridview);
ma = new MenuAdapter(this, menu); //menu is the tree I pass to the adapter
gridview.setAdapter(ma);

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
//ma.setSubTree(position);
menu = menu.children.get(position);
gridview.deferNotifyDataSetChanged();
gridview.invalidateViews();
Toast.makeText(MainActivity.this, "" + position,
Toast.LENGTH_SHORT).show();
}
});

使用 stdout 进行调试时,树位置确实已更新,但 View 保持不变。这让我相信我犯的错误是在适配器的 getView 方法中,但我终究无法弄清楚。

getView 从每个 Tree 节点的数据中扩展自定义布局(图像缩略图和 TextView)。

fragment :

 public View getView(int position, View convertView, ViewGroup parent) {

LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View gridView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
gridView = new View(mContext);
gridView = inflater.inflate(R.layout.grid_item, null);

TextView textView = (TextView) gridView.findViewById(R.id.gridItemText);
textView.setPadding(15, 15, 15, 15);
textView.setText(menu.children.get(position).toString());

com.beardedhen.androidbootstrap.BootstrapCircleThumbnail thumb = (com.beardedhen.androidbootstrap.BootstrapCircleThumbnail) gridView.findViewById(R.id.thumb);
thumb.setImage(menu.children.get(position).imageSource);
} else {

gridView = (View) convertView;
}
return gridView;
}

如有任何帮助,我们将不胜感激。

最佳答案

即使 convertView 为 null,您也应该将数据更改反射(reflect)到 View 中。伪代码:

if(convertView == null) {
convertView = inflater.inflate(...);
}
// update view below
// set your textView etc.

当convertView为null时,你为它创建,当它不为null时,意味着你之前创建,android将这个脏 View 传递给getView,所以你需要更新它以反射(reflect)底层数据。 View 创建和 View 配置是不同的事情。

关于android - 为什么 GridView 中的适配器不更新其内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32425134/

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