【问题标题】:Weird things happening with ProgressDialog and AlertDialogProgressDialog 和 AlertDialog 发生了奇怪的事情
【发布时间】:2011-09-12 13:59:50
【问题描述】:

我正在从我的程序中向 FB 发布一些内容。 效果很好,只是我想先显示 ProgressDialog,然后再显示 AlertDialog。

由于某种原因,ProgressDialog 根本没有出现,而 AlertDialog 却出现了,但代码的执行会继续执行并且不会“等待”。

private void uploadToFB(){
    if (settings.getCurrentUploadToFB()){

        ProgressDialog progressDialog = ProgressDialog.show(this, "Posting to Facebook", "Please wait ...", true);
        Bundle parameters = new Bundle();
        parameters.putString("link","https://market.android.com/details?id=il.co.anykey.games.yaniv.lite&feature=search_result");
        parameters.putString("picture","http://www.anykey.co.il/images/launcher_yaniv.png");
        parameters.putString("name","YanivLite on Android");
        parameters.putString("caption","Can you beat my score?");
        parameters.putString("description","I scored "+ ScoringForScoreloop.getScore() + " in YanivLite on Android. Can you beat my score?");
        facebookConnector.postMessageOnWall(parameters);

        final AlertDialog alertDialog = new AlertDialog.Builder(this).create();

        alertDialog.setTitle(R.string.uploadedToFacebookTitle);
            ScoringForScoreloop.addAssafedScore();
            alertDialog.setMessage(getString(R.string.uploadedToFacebookMessage));   


        alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,getString(R.string.ok), new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {            
                   try {
                    alertDialog.dismiss();
                    finishGame();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                   return;
        } });
        alertDialog.setCancelable(false);  // prevent use of back button which would skip the listener
        alertDialog.show();
    }
    else
        finishGame();

}

【问题讨论】:

  • 对进度对话框使用 AsyncTask。

标签: android android-alertdialog progressdialog


【解决方案1】:

试试这个课程

private void uploadToFB(){
    if (settings.getCurrentUploadToFB())
         new PostBackground.execute();
    else
         finish();
}

private class PostBackground extends AsyncTask<Void, Void, Void>{
    private ProgressDialog progressDialog;
    public void doInBackgound(Void...obj){
         publishUpdate();
         Bundle parameters = new Bundle();
        parameters.putString("link","https://market.android.com/details?id=il.co.anykey.games.yaniv.lite&feature=search_result");
        parameters.putString("picture","http://www.anykey.co.il/images/launcher_yaniv.png");
        parameters.putString("name","YanivLite on Android");
        parameters.putString("caption","Can you beat my score?");
        parameters.putString("description","I scored "+ ScoringForScoreloop.getScore() + " in YanivLite on Android. Can you beat my score?");
        facebookConnector.postMessageOnWall(parameters);

    }

    public void postUpdate(Void arg){
        progressDialog = ProgressDialog.show(this, "Posting to Facebook", "Please wait ...", true);
    }

   public void postExecute(Void result){
        if(progressDialog!=null)
              progressDialog.dismiss();

        progressDialog = null;
        final AlertDialog alertDialog = new AlertDialog.Builder(this).create();

    alertDialog.setTitle(R.string.uploadedToFacebookTitle);
        ScoringForScoreloop.addAssafedScore();
        alertDialog.setMessage(getString(R.string.uploadedToFacebookMessage));   


    alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,getString(R.string.ok), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {            
               try {
                alertDialog.dismiss();
                finishGame();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
               return;
    } });
    alertDialog.setCancelable(false);  // prevent use of back button which would skip the listener
    alertDialog.show();

   }
}

【讨论】:

    【解决方案2】:

    您真的应该在 AsyncTask 中向 facebook 发帖。这应该可以解决您的问题。

    【讨论】:

    • 看看 Pratik 的回答 - 他是一个比我发布所有代码更好的人 :O)
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2022-01-22
    • 2013-02-27
    • 2021-09-25
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多