gpt4 book ai didi

android - ListView 在滚动期间更改项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:48 25 4
gpt4 key购买 nike

我正在使用自定义 ArrayAdapter 实现 ListFragment 来填充列表。每个行项目都有一个 ImageView 和三个 TextView。正在通过 XML 解析数据,并异步加载图像。

我遇到的问题是 ListView 填充并看起来不错,但滚动时出现问题。我可以一次在屏幕上放置 7 个项目。当我滚动到第 8 行时,它突然发生变化,因此应该出现下一行。它仅在可被 8 整除的行(即第 8、16、24 等行)上执行。

我正在使用 ViewHolder 模式来确保此 ListView 的良好速度。我认为问题出在某个地方,但我已经四处搜索,看来我正在正确地执行此模式,并且我已经用完所有要检查的东西以解决此问题。我究竟做错了什么?谢谢!

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MyViewHolder holder;
if (row == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
row = inflater.inflate(R.layout.browse_result_list_item, null, false);
holder = new MyViewHolder();
holder.adTitle = (TextView) row.findViewById(R.id.adTitle);
holder.region = (TextView) row.findViewById(R.id.region);
holder.time = (TextView) row.findViewById(R.id.time);
holder.thumbnail = (ImageView) row.findViewById(R.id.browseThumbnail);
row.setTag(holder);
} else {
holder = (MyViewHolder) row.getTag();
}
SearchResult result = mObjects.get(position);

holder.adTitle.setText(result.getTitle().substring(0, result.getTitle().length()-3)); // three ... at the end, remove them
holder.region.setText(result.getRegion());
holder.time.setText(result.getPostingTime());

// Download the image thumbnail
ArrayList<String> urls = result.getImageUrls();
if (urls.size() > 0)
download(urls.get(0), holder.thumbnail);
else // No image for this post, put a placeholder
holder.thumbnail.setImageResource(R.drawable.ic_action_picture);

return row;
}

private static class MyViewHolder {
public static TextView adTitle;
public static TextView region;
public static TextView time;
public static ImageView thumbnail;
}

编辑:我找到了 solution感谢@frozenkoi。最终成为导致问题的 ViewHolder 中的静态变量。它们现在只是公开的,类是静态的,问题已经解决。

最佳答案

首先在getView()方法中定义成convertView=null;并在该方法中注释else条件并添加int type = getItemViewType(position);。还从每个 View 项中删除静态关键字,如 ViewHolder 类中的 Textview、ImageView

NOTE: override getViewTypeCount() and getItemViewType() in your adapter.

if(convertView == null){
switch (type) {
case 0:
//First view[Row layout]
break;
case 1:
//Second view[Row layout]
break;

//another Case here....

convertView.setTag(holder);

//remove else part when used convertView =null;
/*else {
holder = (MyViewHolder) row.getTag();
}*/

}

@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
map = list.get(position);
message_type = map.get("message_type");
if (message_type.equalsIgnoreCase("TEXT")) {
return 0;
} else {
return 1;
}

}

@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
if (getCount() != 0)
return getCount();
return 2;
}

现在就做!完成!

关于android - ListView 在滚动期间更改项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19752239/

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