gpt4 book ai didi

Android:在 getView() 中执行异步操作的最佳实践

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

请不要关闭它,恕我直言,这是一个体面且可能有用的编程问题。


拜托,我正在阅读很多东西,但我感到困惑,因为我阅读了不同的观点和不同的方法。

问题如下:

AdaptergetView() 中,我需要执行一些异步操作,例如检查 web 上的队形,并基于此更新 View 。

我使用了以下方法:

每次 getView() 被调用时,我都会启动一个 Thread

但是我的做法为我赢得了很多批评:

https://stackoverflow.com/a/28484345/1815311

https://stackoverflow.com/a/28484335/1815311

https://stackoverflow.com/a/28484351/1815311

public View getView(int position, View convertView, ViewGroup parent) { 
ViewHolder holder;
if (convertView == null) {
//...
}
else {
//...
}

Thread th= new Thread(new Runnable() {

@Override
public void run() {
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {

CheckSomeInfoOverTheInternet(url, new myCallback {


@Override
public void onSuccess() {
holder.textview.setText("OK");
}

@Override
public void onFailre() {
holder.textview.setText("NOT OK!!!!");
}

});
}
});


}
});

th.start();

return convertView;
}

请问做这种事情的最佳做法是什么?


请注意,我不是在寻找在 getView() 中执行网络请求的解决方案,而是在寻找如何根据异步调用的结果更新 View 。

最佳答案

这绝对不是在 ListView 中更新信息的好方法。 getView 方法应该只是根据您已有的数据创建 View 。它当然不应该运行任何东西来获取更多信息。

我能给你的最好建议是事先获取数据。提取数据,更新您的 Adapter 连接到的 ArrayList,然后调用 adapter.notifyDataSetChanged()。这将重绘您的所有信息。

一次提取所有数据 - 而不是一小部分。这是最好和最合理的方法。

关于Android:在 getView() 中执行异步操作的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28504524/

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