gpt4 book ai didi

android - 等待 Activity 显示

转载 作者:行者123 更新时间:2023-11-29 15:40:35 25 4
gpt4 key购买 nike

目前我有一个加载 Activity 的按钮。

该 Activity 中有一个 ListView,无论出于何种原因需要相当长的时间来加载(不是等待数据,数据已经在内存中)。问题是,当它呈现列表时,UI 在按钮被点击的地方等待,并且在列表完全加载之前不会改变屏幕。

我想要的是仅在加载 Activity 后显示列表,因此至少在他们按下按钮时会立即发生一些事情(响应式 UI 很重要)。

目前,我的解决方案是生成一个线程,等待 50 毫秒,然后为我的列表设置适配器(使用 runOnUiThread)。当然,如果 Activity 在某些手机上加载时间超过 50 毫秒,则必须加载整个列表才能再次加载 Activity。

当前相关代码:

@Override
public void onPostResume() {
super.onPostResume();
new Thread(new Runnable() {
@Override
public void run() {
final AdapterData data = getData();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
myAdapter = new MyAdapter(MyActivity.this, data);
lvMyList.setAdapter(myAdapter);
}
});
}
}).start();
}

我只是更改了代码中的变量名,但这无关紧要。这只是为了让您可以看到我的一般解决方案。

我觉得应该有某种在 Activity 完成创建时调用的回调。我认为 onPostResume 等待 Activity 完成加载,但这没有用。它仍然挂着。

最佳答案

你可以使用 IdleHandler

protected void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);
setContentView(R.layout.xxx);
final AdapterData data = getData();
IdleHandler handler = new IdleHandler() {

@Override
public boolean queueIdle() {
myAdapter = new MyAdapter(MyActivity.this, data);
lvMyList.setAdapter(myAdapter);
return false;
}
};
Looper.myQueue().addIdleHandler(handler);

}

关于android - 等待 Activity 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268495/

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