在android中循环显示对话框

时间:2013-03-01 16:27:44

标签: android android-dialog

我正在尝试显示包含数据库内容的对话框。数据库中提取的数据可能包含多个数据。因此我必须在for循环中显示对话框。但对话框仅显示第一行中的对话框。 database.Here是代码

cursor = sqldb.query(Database_Handler.dbdectab, null,"((" + Database_Handler.gendtime + "<='" + after_1hr + "' and " + Database_Handler.gendtime + ">='" + before_1hr + "') and (" 
            + Database_Handler.calused + "='Gregorian' or " + Database_Handler.calused + "='both')) ", null, null, null, null);
    notif_count = cursor.getCount();
    //dec_name_ctr_builder = new StringBuilder("");
    if(notif_count>0)
    {
        dialog1 = new Dialog(this);
        cursor.moveToFirst();
        do
        {
            dec_name =cursor.getString(cursor.getColumnIndex(Database_Handler.decname));

            dialog1.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog1.setContentView(R.layout.custom_dialog_alert);

            TextView tv_alert = (TextView)dialog1.findViewById(R.id.txt_alert);
            tv_alert.setText( dec_name );
            Button yes = (Button) dialog1.findViewById(R.id.btn_yes);
            Button no = (Button) dialog1.findViewById(R.id.btn_no);

            yes.setOnClickListener(new OnClickListener()
            {
                public void onClick(View v) 
                {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(donateurl));
                    startActivity(intent);
                    dialog1.dismiss();
                    cursor.close();
                    sqldb.close();
                    finish();
                }
            });
            no.setOnClickListener(new OnClickListener()
            {
                public void onClick(View v)
                {
                    dialog1.dismiss();
                    cursor.close();
                    sqldb.close();
                    finish();
                }
            });
            dialog1.show();
        }while(cursor.moveToNext());

3 个答案:

答案 0 :(得分:0)

Android对话框不是模态的(也就是说,它们不会阻止后台进程)。因此,您的工作是按照asycnhronuosly完成的,并且根据:

罗曼家伙

We've designed Android to prevent developers from writing synchronous dialogs so you don't really have much of a choice.

所以你不能使用Dialog阻止while循环执行。

答案 1 :(得分:0)

Karan_Rana是对的。最简单的解决方案是将结果存储在其他地方,并在每次留下一些数据并且用户点击上一个对话框按钮时显示一个新对话框。

答案 2 :(得分:0)

我知道这有点晚了,但是我曾经有过类似的问题。我使用递归来循环对话框。我的情况很独特,因为我需要在应用启动过程中检测互联网连接。因此,此方法可能不适合您。但是我能够实现解决方案而无需for循环和阻塞主UI线程。因为我在启动屏幕上,所以不需要竞争其他UI,因此我将再次简单地再次调用该对话框,直到用户选择“退出”为止。

我有一个启动屏幕,如果检测到网络连接,它将仅继续执行该应用程序的着陆活动。

下面的示例代码演示了该概念。请注意,有一些自定义方法,但是您应该可以从onClick方法中再次调用提示。

protected void onCreate(Bundle savedInstanceState) {
    if (isNetworkAvailable()) {
       launchApp();
    } else {
        retryPrompt();
    }

}

private void retryPrompt() {
        if (isNetworkAvailable()) {
            launchApp();
        } else {
            final ConfirmDialog dialog = new ConfirmDialog.CustomAlertBuilder(this,
                    "Internet Connection",
                    "Internet Connection not detected. Please check your connection.",
                    "Retry").
                    setNegBtnLabel("Quit").
                    setCustomCallback(new CustomDialogCallback() {
                        @Override
                        public void onClickPositiveBtn(DialogInterface dialogInterface, int which) {
                            // go around again.
                            retryPrompt(); // <<== Call method recursively
                        }

                        @Override
                        public void onClickNegativeBtn(DialogInterface dialogInterface, int which) {
                            // abort app.
                            finish();
                        }
                    }).build();
            dialog.show();
        }
    }