gpt4 book ai didi

Android - 为 ListView 填充适配器的异步任务

转载 作者:行者123 更新时间:2023-11-29 20:54:29 28 4
gpt4 key购买 nike

基本上流程如下:创建 fragment 时(或当用户滑动刷新布局时),执行 AsyncTask。 ASyncTask 从 URL 中检索信息并设置适配器,然后将其分配给 ListView。

这是 fragment 的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.tasks_page, container, false);
mSwipeRefreshLayout = (SwipeRefreshLayout)
rootView.findViewById(R.id.list_container);
mSwipeRefreshLayout.setOnRefreshListener(this);
mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,
android.R.color.holo_green_light, android.R.color.holo_red_light);

lv = (ListView) rootView.findViewById(android.R.id.list);
getTasks();

return rootView;
}

private void getTasks() {
new TasksRetriever(mSwipeRefreshLayout,tasksAdapter,lv).execute();
}

@Override
public void onRefresh() {
mSwipeRefreshLayout.setRefreshing(true);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getTasks();
}
}, 1000);
}

TaskRetriever 的构造函数是:

public TasksRetriever(SwipeRefreshLayout srl, TasksAdapter ta, ListView lv) {
adpt = ta;
this.srl = srl;
this.lv = lv;
}

postExecute 是:

@Override
protected void onPostExecute(List<TasksItem> result) {
super.onPostExecute(result);
dialog.dismiss();
if (adpt == null) adpt = new TasksAdapter(result);
else adpt.setItemList(result);
lv.setAdapter(adpt);
adpt.notifyDataSetChanged();
srl.setRefreshing(false);
}

还不确定它是否有效,但我想知道我是否在正确的轨道上,因为它看起来不太干净。另一方面,我无法创建适配器并将其分配给 ListView,直到我真正拥有它的数据...这是考虑好还是我做错了?

最佳答案

我会在 ListView 下的 onCreate() 方法中设置列表适配器,并将其设为实例变量(不是本地变量),以便异步任务可以按如下方式访问它,即

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

lv = (ListView) rootView.findViewById(android.R.id.list);
mAdpt = new TasksAdapter(null);
lv.setAdapter(mAdpt);

}

然后在你的 onPostExecute() 中

@Override
protected void onPostExecute(List<TasksItem> result) {
dialog.dismiss();
mAdpt.clear();
for( TaskItem ti : result )
{
mAdpt.add( ti );
}
mAdpt.notifyDataSetChanged();
srl.setRefreshing(false);
}

还要确保您考虑了在 getView() 方法中传递到适配器的空值。

希望这对您有所帮助。

关于Android - 为 ListView 填充适配器的异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28171256/

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