无法在我的程序结构中创建AlertDialog

时间:2014-04-02 16:48:33

标签: java android dialog alertdialog

我正在制作我的第一款安卓游戏,我有一些我希望用java和C#制作简单游戏的知识实现的东西。为此,我有扩展Activity的主类,然后我创建了一个GameView类的对象,它将SurfaceView和setContentView扩展到该类。 这里有一些代码:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    gameView = new GameView(this);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(gameView);

在我的GameView类中,我拥有一个简单游戏的所有常用部分,一个循环和Sprite对象等。这一切都很好用,直到打开一个AlertDialog来从用户那里获取文本输入以保存游戏。这是我担心我错过了这一点的部分。在android中编程,因为我已经尝试过实现这个显示的解决方案

这里: Android AlertDialog inside AsyncTask

在这里: How do I display an alert dialog on Android?

在这里: http://www.androidsnippets.com/prompt-user-input-with-an-alertdialog

我收到错误'无法在未调用Looper.prepare()'的线程内创建处理程序。我试过几次这几次。我已经接近完成这个项目了,现在我觉得我已经错过了基本的android编程结构。问题是我不知道我应该在哪里创建和显示AlertDialog,如果它在主Activity或GameView SurfaceView中。如果它在主要活动中,我如何退出GameView回到活动中,并返回一些数据用于下一个(视图?)以在AlertDialog中使用。

对不起,如果这看起来太模糊了,那就是因为我试图创建一个AlertDialog,它让我的理解失去了,我觉得我错过了什么。

所以我的问题是,我的结构有什么问题,更具体地说,我在哪里放置AlertDialog;我可以在从我的GameView类调用的某个方法或类中运行它,还是我需要退出/结束该类返回到主活动,并在其中运行它?

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

AlertDialog alertDialog;
protected void onPreExecute() 
{
    super.onPreExecute();
    alertDialog = new AlertDialog.Builder(this);
}
@Override
protected String doInBackground(String... params)
{       
       return null;
}
@Override
protected void onPostExecute(String result) 
{
       super.onPostExecute(result);

       alertDialog.setTitle("The Process");  
       //alertDialog.setIcon(R.drawable.success);
       alertDialog.setCanceledOnTouchOutside(false);
       alertDialog.setMessage("All done!");  
       alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
       new DialogInterface.OnClickListener() 
       {
                       public void onClick(DialogInterface dialog, int which) 
                       {

                       }
                               });
       alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() 
       {          
 @Override
 public void onDismiss(DialogInterface dialog) 
 {

 }
 });
 alertDialog.show();
 }

}

1 个答案:

答案 0 :(得分:0)

您必须在onPostExecute方法中显示Alert dailog,然后才能显示。您可以在后台运行方法中显示Alert Dailog。

首选以下链接:

Android AlertDialog inside AsyncTask

已更新

 Instead of AlertDialog alertDialog use
 AlertDialog.Builder alertDialogBuilder

然后创建对话

final AlertDialog alertDailog = alertDialogBuilder.create();

最后:

alertDailog.show();