gpt4 book ai didi

android ListView 适配器方法 getViewTypeCount() 在 adapter.notifyDataSetChanged() 时不触发

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

我希望我的 ListView 每 10 个项目加载一次,而不希望我的 ListView 重用项目。

1.我加载了 10 个项目并将适配器设置为 ListView ,在适配器类中我像这样调用方法 getViewTypeCount()。(当前在 itemList 中有 10 个)

public int getViewTypeCount() {
return itemList.size();
}

2.我在 getViewTypeCount() 中调试它返回值 10。

3.然后我将新的 10 个项目添加到 itemList(当前在 itemList 中有 20 个)并调用 adapter.notifyDataSetChanged()

4.当我向下滚动我的 ListView 时它工作但是当我向上滚动时它是错误的(不幸的是)

5.我发现问题是因为 getViewTypeCount() 在 adapter.notifyDataSetChanged() 之后没有触发,它没有返回 20(我知道因为我在 getViewTypeCount() 中测试了返回 500,它是有效的而不是错误。)

6.我希望我的 ListView 每 10 个项目加载一次,我不希望我的 ListView 重用位置。如何解决?

编辑

这是我的适配器类

public class ContentListAdapter extends BaseAdapter {

private Context context;
private ArrayList<ContentInfo> Content;
private LayoutInflater Layf;

public ContentListAdapter(Context context, ArrayList<ContentInfo> content){
this.context = context;
this.Content = content;
this.Layf = LayoutInflater.from(context);
}

@Override
public int getCount() {
return Content.size();
}

@Override
public Object getItem(int position) {
return Content.get(position);
}

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

@Override
public int getItemViewType(int position) {
return position;
}

@Override
public int getViewTypeCount() {
return Content.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = Layf.inflate(R.layout.content_list_item, null);
}

ImageView img_ContentImage = (ImageView) convertView.findViewById(R.id.img_ContentImage);
TextView tv_ContentName = (TextView) convertView.findViewById(R.id.tv_ContentName);
TextView tv_ContentDate = (TextView) convertView.findViewById(R.id.tv_ContentDate);
TextView tv_ContentViews = (TextView) convertView.findViewById(R.id.tv_ContentViews);

if(img_ContentImage != null){
if(Content.get(position).getPicture().length() > 0)
new DownloadImageViewTask(img_ContentImage).execute(Content.get(position).getPicture());
}
if(tv_ContentName != null)
tv_ContentName.setText(Content.get(position).getTitle().replace(" "," ").replace("-", "–"));
if(tv_ContentDate != null) {
if(Content.get(position).getPublishDate().length() > 0) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date dt = sdf.parse(Content.get(position).getPublishDate());
String year = new SimpleDateFormat("yyyy", new Locale("th", "TH")).format(dt);
String byear = (Integer.parseInt(year) + 543) + "";
tv_ContentDate.setText((new SimpleDateFormat("d MMM yyyy", new Locale("th", "TH")).format(dt)).replace(year, byear));

}catch (Exception e){

}
}
}
if(tv_ContentViews != null){
DecimalFormat formatter = new DecimalFormat("#,##0");
tv_ContentViews.setText(formatter.format(Content.get(position).getViews()));
}
return convertView;
}

最佳答案

getViewTypeCount()在您调用 setAdapter 时调用。

关于android ListView 适配器方法 getViewTypeCount() 在 adapter.notifyDataSetChanged() 时不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755130/

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