gpt4 book ai didi

android - 如何将行异步添加到 ListView ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:16 26 4
gpt4 key购买 nike

我需要用来自网络的数据填充一个很长的 ListView,比如整个数据收集需要 2-3 秒。我不希望用户看到正在加载的 Dialog 并等待整个列表下载。相反,我想在每个项目可用时更新 ListView

  • 我该怎么做?
  • 我假设通过使用 OnProgressUpdateAsyncTask 添加到 ArrayAdapter
  • 我是否必须在每个添加的行之后发出一个 notifyDatasetChanged()
  • Fragment/Loader 方法更好吗?
  • 是否有案例的教程或API演示引用实现像这样?

Activity 结束之前完全获取数据并不重要(即 Service 是不必要的)

最佳答案

到目前为止我见过的最好的方法来自 CommonsWare .在这个相关answer中找到.

显然,在没有 notifyDatasetChanged() 的情况下调用 add 没有任何问题。

public class AsyncDemo extends ListActivity {
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet", "consectetuer",
"adipiscing", "elit", "morbi",
"vel", "ligula", "vitae",
"arcu", "aliquet", "mollis",
"etiam", "vel", "erat",
"placerat", "ante",
"porttitor", "sodales",
"pellentesque", "augue",
"purus"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
new ArrayList<String>()));

new AddStringTask().execute();
}

class AddStringTask extends AsyncTask<Void, String, Void> {
@Override
protected Void doInBackground(Void... unused) {
for (String item : items) {
publishProgress(item);
SystemClock.sleep(200);
}

return(null);
}

@Override
protected void onProgressUpdate(String... item) {
((ArrayAdapter<String>)getListAdapter()).add(item[0]);
}

@Override
protected void onPostExecute(Void unused) {
Toast
.makeText(AsyncDemo.this, "Done!", Toast.LENGTH_SHORT)
.show();
}
}
}

关于android - 如何将行异步添加到 ListView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995429/

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