0

データベースからのコンテンツを含むダイアログ ボックスを表示しようとしています。データベースからフェッチされたデータには複数のデータが含まれている可能性があります。そのため、for ループでダイアログを表示する必要があります。しかし、ダイアログはデータベースの最初の行に対してのみ表示されます。コードです

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());
4

3 に答える 3

0

Android ダイアログ ボックスはモーダルではありません (つまり、バックグラウンド プロセスをブロックしません)。したがって、作業は非同期的に次のように行われます。

ロマン男

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

そのため、Dialog を使用する間に while ループの実行をブロックすることはできません。

于 2013-03-01T16:38:22.953 に答える
0

Karan_Rana そうですね。あなたの答えの最も簡単な解決策は、結果を別の場所に保存し、データが残っていてユーザーが前のダイアログボタンをクリックするたびに新しいダイアログを表示することです。

于 2013-03-01T16:57:22.690 に答える