gpt4 book ai didi

android - 使用 setContentView 加载布局时显示 ProgressDialog

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:12 25 4
gpt4 key购买 nike

这是我的场景:我有一个打开另一个 Activity 的登录屏幕。在 Activity 中,我只有:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
}

布局有点重,因为它是由一些 fragment 组成的,加载大约需要 1.5 秒。现在,如何在 setContentView 完成布局膨胀时显示 ProgressDialog?我已经尝试通过将 setContentView 放在 doInBackground 中来使用 AsyncTask,但是当然不能这样做,因为 UI 可以从更新仅限 UI 线程。所以我需要在 UI 线程中调用 setContentView,但是我必须在哪里显示/关闭 ProgressDialog

感谢您的帮助。

兄弟。

编辑:我遵循了@JohnBoker 之前的建议,这是我现在的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_empty_layout);
new ContentSetterTask().execute("");
}

private class ContentSetterTask extends AsyncTask<String, Void, Void> {

public ProgressDialog prgDlg;

@Override
protected void onPreExecute() {
android.os.Debug.waitForDebugger();
prgDlg = ProgressDialog.show(MultiPaneActivity.this, "", "Loading...", true);

}

@Override
protected Void doInBackground(String... args) {
android.os.Debug.waitForDebugger();
ViewGroup rootView = (ViewGroup)findViewById(R.id.emptyLayout);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflated = inflater.inflate(R.layout.activity_details, rootView);
return null;
}

@Override
protected void onPostExecute(Void arg) {
android.os.Debug.waitForDebugger();
if (prgDlg.isShowing())
prgDlg.dismiss();
}
}
}

View inflated = inflater.inflate(R.layout.activity_details, rootView);

给我错误:

06-27 16:47:24.010:   
ERROR/AndroidRuntime(8830): Caused by:android.view.ViewRoot$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.

最佳答案

我决定在这里为 future 的读者做一个完整的回答。

在这个问题上花了几个小时后,我意识到这个问题是我正在尝试做两件事:

  1. 扩充布局,这是一个需要进行的操作设计的 UI 线程。
  2. 显示一个对话框(ProgressDialog,实际上,但这并没有改变结果),这可以从仅 UI 线程,因为服务无法显示任何对话框。

因此,由于这两个调用都是从 UI 线程进行的(onCreate 或 AsyncTask 没有区别,它仍然是 UI 线程),第一个阻止第二个正确显示。底线是:目前在 Android 中这个问题无法解决。让我们希望我们可以获得一些更好的 API 来与 UI 交互,因为我们得到的 API 有点烂。

我将通过更改布局并使其更轻(如果可能的话!)来解决这个问题。谢谢大家!

关于android - 使用 setContentView 加载布局时显示 ProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493534/

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