gpt4 book ai didi

java - getView 从未因我之外的原因被调用

转载 作者:行者123 更新时间:2023-12-01 15:17:55 25 4
gpt4 key购买 nike

我有一个通过 asynctask 填充的自定义 ListView 适配器,我在 onprogress 函数中调用 notificationdatasetchanged,并且 getCount() 返回 10,但我的列表从未显示,我设置了一个断点并确定 getView() 根本不会显示叫做。有任何想法吗?我已经尝试了几个小时,但我只是被难住了。我在另一项 Activity 中做了完全相同的事情,除了一个使用了 View 持有者,这个 Activity 只保存基于文本的数据,所以我没有打扰。

适配器:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null) {
row = inflater.inflate(R.layout.podcastepisode, null);
}
PodcastItem item = items.get(position);
TextView episodeTitle = (TextView)row.findViewById(R.id.episodeTitle);
TextView episodeDate = (TextView)row.findViewById(R.id.episodeDate);
episodeTitle.setText(item.title);
episodeDate.setText(API.FormatPodcastDate(item.date));
return row;
}

我的任务:

protected void onProgressUpdate(PodcastItem... progress) {
AddPodcastActivity.episodes.add(progress[0]);
AddPodcastActivity.adapter.notifyDataSetChanged();
}

最佳答案

我建议将列表适配器从 Activity 文件内部移动到它自己的文件中,并使用如下内容:

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class EpisodeArrayAdapter extends BaseAdapter {

public EpisodeArrayAdapter(Context context) {
mContext = context;
items = new ArrayList<PodcastItem>();
}

private Context mContext;
private ArrayList<PodcastItem> items;

public void add(PodcastItem item) {
items.add(item);
notifyDataSetChanged();
}

public void remove(int index) {
items.remove(index);
notifyDataSetChanged();
}

public void clear() {
items.clear();
notifyDataSetChanged();
}

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

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null) row = LayoutInflater.from(mContext).inflate(R.layout.podcastepisode, null);
PodcastItem item = items.get(position);
TextView episodeTitle = (TextView)row.findViewById(R.id.episodeTitle);
TextView episodeDate = (TextView)row.findViewById(R.id.episodeDate);
episodeTitle.setText(item.title);
episodeDate.setText(API.FormatPodcastDate(item.date));
return row;
}
}

这是我们用于 Boid 中所有列表适配器的代码类型:) 另外,请注意添加/删除/清除函数调用了 notificationDataSetChanged(),这样您就不必在以下情况下自己调用它:添加项目。

当你初始化它时,你只需使用:

EpisodeArrayAdapter adapter = new EpisodeArrayAdapter(this);
listView.setAdapter(adapter);

使用 add() 函数添加项目将导致列表立即更新。确保为使用适配器的 ListView 调用 setAdapter,否则不会有任何连接,并且列表中不会显示任何内容(在代码中没有看到对此的调用)。

关于java - getView 从未因我之外的原因被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11371720/

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