0

ユーザーが選択するボタンがあり、AlertDialog をポップアップして、一部のデータを置き換える操作を OK または CANCEL します。OK と CANCEL は、ASYNCH プロセスであることがわかった後、正常に機能します。また、複数回のクリックも停止します。ただし、ユーザーが [OK] を押すと、いくつかのタスクと共に情報をメモリに保存する必要があります。OK プロセスには約 3 秒かかります。これは、せっかちな人の限界を超えています。メッセージ付きの不確定な進行状況バーを表示したい。しかし、Java と android に対する私の新しさが邪魔になっています。以下のコードの「コンテキスト」とは正確には何ですか?

public void getData(final View v)
{
     if(AlertDialogProcessing==0)
     {   
         final String title="Set Image to Wallpaper";
         final String message="Press OK to set as Wallpaper or CANCEL";
         final String ok="OK";
         final String cancel="CANCEL";
         final AlertDialog.Builder alertbox = new AlertDialog.Builder(this);
         try{
              alertbox.setMessage(message);
              alertbox.setTitle(title);
              alertbox.setPositiveButton(ok,new DialogInterface.OnClickListener(){ 
                   public void onClick(DialogInterface arg0, int arg1)
                   {  
                        Vibrate(ClickVibrate); 
                        Drawable drawable= getSun(imageSelect);  
                        ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);   //<<<<<<<<<<ERROR at context
                        AlertDialogProcessing=1;     
                        SaveData(drawable,1);
                        AlertDialogProcessing=0;
                        dialog.dismiss();
                        Toast.makeText(getApplicationContext(), "Data Saved.",Toast.LENGTH_LONG).show();      
                   } 
              });

              alertbox.setNegativeButton(cancel,new DialogInterface.OnClickListener(){
                   public void onClick(DialogInterface arg0, int arg1){
                        AlertDialogProcessing=0; 
                        Vibrate(ClickVibrate); 
                   } 
              });
              //alertbox.setCanceledOnTouchOutside(false); // maybe a 4.0 problem
              alertbox.show();
        } catch(Exception e){   
              //TODO Handle BadTokenException.    
        }
     }
}
4

3 に答える 3

1

コンテキストの取得に問題がある場合は、単に , を置き換えることができます

 ProgressDialog dialog = ProgressDialog.show(context, "Loading", "Please
   wait...", true);  

と、

ProgressDialog dialog = ProgressDialog.show(v.getRootView().getContext(), "Loading", "Please
   wait...", true);  

ここで、 v.getRootView().getContext(); getData() メソッドで渡されたビュー オブジェクトのコンテキストを参照します。

于 2012-06-20T10:13:58.597 に答える
1

では、 progressDialog を作成し、UI スレッドでアクティビティをonClick()実行しています。saveData()あなたができることは、ダイアログボックスを作成してAsyncTaskダイアログボックスを表示し、保存アクションを実行してダイアログを閉じることです。OnClick()onPreExecute()doInBackground()onPostExecute()

Context の定義は次のとおりです(Android開発者サイトによる):

アプリケーション環境に関するグローバル情報へのインターフェイス。これは、Android システムによって実装が提供される抽象クラスです。アプリケーション固有のリソースとクラスへのアクセス、およびアクティビティの起動、インテントのブロードキャストと受信などのアプリケーションレベルの操作のアップコールを許可します。

説明が役立つことを願っています。

于 2012-06-20T10:16:14.553 に答える
0

ここで context は、進行状況ダイアログを呼び出すアクティビティのコンテキストです。したがって、YourActivity.this である必要があります。

于 2012-06-20T10:11:06.307 に答える