gpt4 book ai didi

android - 列表 fragment 中的奇怪错误

转载 作者:行者123 更新时间:2023-11-29 16:05:22 24 4
gpt4 key购买 nike

我想研究 android sqlite,所以我创建了一个即时标记应用程序,用户可以在其中标记他的照片并将它们上传到他的网络(google+、fb、twitter)问题是我有一个 ListFragment用户可以在其中看到他所做的所有标记,列表中的图像元素存储在隐藏文件夹中,单词存储在 sqlite 数据库中。问题是向上或向下滚动时某些项目只是随机切换加上即使我有超过 8 个项目,其中 8 个第一个项目被重复显示(即 1-8 而不是 9-12 我再次看到 1-4)唯一的问题可能在适配器中,但在调试 session session 之后我找不到问题我的适配器代码是 -

public class FlowAdapter extends BaseAdapter {

private Activity activity;
private ArrayList<HashMap<String, List<String>>> data;
private static LayoutInflater layoutInflater = null;

public FlowAdapter(Activity activityContext,
ArrayList<HashMap<String, List<String>>> data) {
this.activity = activityContext;
this.data = data;
this.layoutInflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {
return data.size();
}

public Object getItem(int position) {
return data.get(position);
}

public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// method variables
ViewHolder cacheView;
HashMap<String, List<String>> photos = null;
photos = data.get(position);
ImageView iv;
FlowLayout flow;

ArrayList<String> subjects = new ArrayList<String>();

if (convertView == null) {
cacheView = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.list_item, null);
flow = (FlowLayout) convertView.findViewById(R.id.flow_tags);;

// add the tags to the flowlayout
int size = photos.get(DatabaseHandler.KEY_TAGS).size();
for (int i = 0; i < size; i++) {
String name = String.format("#%s",
photos.get(DatabaseHandler.KEY_TAGS).get(i));
Bubble.getBubble(name, flow, subjects, activity, photos
.get(DatabaseHandler.KEY_THUMBNAILPATH).get(1), false);
}
cacheView.image = (ImageView)convertView.findViewById(R.id.list_image);//iv;
cacheView.tags = flow;
convertView.setTag(cacheView);

}

cacheView = (ViewHolder) convertView.getTag();
cacheView.image.setImageBitmap(null);
DecodeTask task = new DecodeTask(cacheView.image);
task.execute(photos.get(DatabaseHandler.KEY_THUMBNAILPATH).get(1));
cacheView.image.setTag(R.id.list_image, task);

return convertView;
}

static class ViewHolder {
static FlowLayout tags;
static ImageView image;

public static FlowLayout getFlowLayout() {
return tags;
}
}
}

流程布局来自这里—— http://nishantvnair.wordpress.com/2010/09/28/flowlayout-in-android/气泡布局来自这里 - http://nishantvnair.wordpress.com/2010/09/28/android-create-bubble-like-facebook/我使用这个 SO 线程在后台加载图像 - Large ListView containing images in Android有帮助吗? =\附言我知道已经有这样的应用程序 [而且实际上很多,但是最好的学习来自编写代码,所以这就是我所做的 =)]

最佳答案

原因很明显!!! ViewHolder 中有静态变量:

代替:

 static class ViewHolder {
static FlowLayout tags;
static ImageView image;

public static FlowLayout getFlowLayout() {
return tags;
}
}

必须是:

 static class ViewHolder {
FlowLayout tags;
ImageView image;

public FlowLayout getFlowLayout() {
return tags;
}
}

更多关于 static 变量的信息可以在 Internet 上找到,简而言之,它们不是实例变量,因此更改它的值会为每个实例更改它(尽管应该访问 static 变量使用类引用)。

更新:

如果 convertView 为 null,您还需要取消您的 DecodeTask,如教程所述:Large ListView containing images in Android

但是保持这些变量static 是一个简单的错误并且很容易检测到,就像您可以检测到 2+2 = 5 中的错误一样。说删除 static 修饰符似乎破坏了一切意味着您的代码有其他问题。

关于android - 列表 fragment 中的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214752/

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