gpt4 book ai didi

java - ProgressDialog 未显示在具有自定义 View 的 Activity 中

转载 作者:太空宇宙 更新时间:2023-11-04 14:57:17 26 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,它有 2 个类。 Game 扩展了 Activity,GameView 扩展了 View。

当游戏加载时,它会将内容 View 设置为GameView,它只是一个使用 Canvas 来显示游戏的绘图类。

我正在尝试在 Game 类中创建一个 ProgressDialog,它将在完成某个操作后显示一个旋转器,因为这需要很长时间才能完成。到目前为止,我有以下内容:

setContentView(R.layout.activity_game);
ProgressDialog pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("Calculating hint");
pd.show();
AsyncTask<String[][], Void, SudokuSquare> nextSquareThread = new GetNextSquare().execute(puzzleNumbers);
next = nextSquareThread.get();
pd.dismiss();
setContentView(gameView);

我的 AsyncTask 类如下所示:

private class GetNextSquare extends AsyncTask<String[][], Void, SudokuSquare> {

private ProgressDialog dialog = new ProgressDialog(Game.this);

@Override
protected void onPreExecute() {
this.dialog.setMessage("Finding next number");
this.dialog.show();
}

@Override
protected SudokuSquare doInBackground(final String[][]... args) {
try {
SudokuAdvancedSolver solver = new SudokuSolver(args[0]);
return solver.getOneValue();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

@Override
protected void onPostExecute(final SudokuSquare result) {

if (dialog.isShowing()) {
dialog.dismiss();
}
}
}

目前我有两个 ProgressDialog,一个在 AsyncTask 内部,一个在外部。哪一个是正确的?此外,微调器根本没有显示。我忽略了什么导致了这种情况?

最佳答案

只有外面的才是正确的。因为您正在通过另一个线程(您的异步任务)尝试主线程(您的 Activity 的 UI 线程)。你应该使用处理程序来代替它:1/显示进度条2/你在线程中加载游戏3/当游戏加载时,您向处理程序发送一条消息,该消息将停止进度条。

查看此exemple 。您应该在处理程序中关闭对话框(当处理程序从线程接收消息时)。

关于java - ProgressDialog 未显示在具有自定义 View 的 Activity 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049501/

26 4 0
文章推荐: html - 输入边框 CSS
文章推荐: php - 全高右格
文章推荐: java - A* 寻路问题
文章推荐: Java 错误方法未定义 Echo 类型
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com