gpt4 book ai didi

java - 自定义 gridview 适配器速度慢或四处移动元素

转载 作者:行者123 更新时间:2023-11-30 02:02:09 24 4
gpt4 key购买 nike

我正在尝试创建一个包含图像和文本的 GridView 。我有这段代码:

public View getView(int position, View convertView, ViewGroup parent) {
View gridView;
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
gridView = inflater.inflate(R.layout.gridview_item, null);
TextView textView = (TextView) gridView.findViewById(R.id.gridview_text);
textView.setText(titles[position]);
ImageView imageView = (ImageView) gridView.findViewById(R.id.gridview_picture);
try {
if (imageUrls[position].equals("null")) {
imageView.setImageResource(R.drawable.defaultpic);
}else{
Bitmap bitmap = new setImage().execute(imageUrls[position]).get();
imageView.setImageBitmap(bitmap);
}
}catch(Exception e){
Log.i(MainActivity.TAG, "EXCEPTION:" + e.toString());
}
}
else{
gridView = convertView;
}
return gridView;
}

但是当使用这段代码时,gridview 的一些元素会切换位置。然后我试着改变它。我最终得到了这段代码:

public View getView(int position, View convertView, ViewGroup parent) {
View gridView;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
gridView = inflater.inflate(R.layout.gridview_item, null);
}else{
gridView = convertView;
}
TextView textView = (TextView) gridView.findViewById(R.id.gridview_text);
textView.setText(titles[position]);
ImageView imageView = (ImageView) gridView.findViewById(R.id.gridview_picture);
try {
if (imageUrls[position].equals("null")) {
imageView.setImageResource(R.drawable.defaultpic);
}else{
Bitmap bitmap = new setImage().execute(imageUrls[position]).get();
imageView.setImageBitmap(bitmap);
}
}catch(Exception e){
Log.i(MainActivity.TAG, "EXCEPTION:" + e.toString());
}
return gridView;
}

这行得通,但是 gridview 真的很慢而且有延迟。所以我的问题是,如何制作速度不慢且不切换元素的 gridview?

最佳答案

切换的问题可能是因为你在第一个代码中没有每次都设置回收 View 的字段,从而导致显示旧数据(我过去就是这样) .我还建议查看 ViewHolder 模式以实现更平滑的滚动 (ViewHolder Pattern)。

我认为主要性能问题是 getView 方法中的阻塞调用:我看到的主要嫌疑人是

setImage().execute(imageUrls[position]).get(); 

行,尤其是末尾的 get() 似乎在等待任务完成。如果是这样的话,我会推荐阅读本系列文章Displaying bitmaps efficiently ,其中还解释了如何处理 ListView 中的位图。

关于java - 自定义 gridview 适配器速度慢或四处移动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31297964/

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