2012-03-19 9 views
27

現在、ユーザーが自分のアプリを開いたときに、がプロバージョンにアップグレードするかどうかを尋ねるメッセージが表示されます。 AlertDialogCheckBoxを追加する必要があります。この場合、ユーザーはアプリを開いたときにAlertDialogが表示されなくなります。ここでアラートダイアログにチェックボックスを追加する方法

は、私が今AlertDialogのために持っているものです。

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle(" MY_TEXT"); 
    builder.setMessage(" MY_TEXT ") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        Uri uri = Uri.parse("market://details?id=MY_APP_PACKAGE"); 
        Intent intent = new Intent (Intent.ACTION_VIEW, uri); 
        startActivity(intent);       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }).show(); 

誰かが、ユーザーがアプリを開いたときに、もはやアプリはAlertDialogを表示ようになりますAlertDialogCheckBoxを追加する方法を私を見ることができればそれは素晴らしいでしょう。 ありがとうございます!

答えて

71

AlertDialog.BuilderオブジェクトでsetView(View)メソッドを使用する必要があります。これにより、メッセージ領域とボタンの間にViewが入ります。単にCheckBoxViewを膨らませるとのそれを渡すここに例を示します。

checkbox.xmlあなたは一つだけのアイテムでmultichoicelistを使用することができ

View checkBoxView = View.inflate(this, R.layout.checkbox, null); 
CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox); 
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

     // Save to shared preferences 
    } 
}); 
checkBox.setText("Text to the right of the check box."); 

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle(" MY_TEXT"); 
    builder.setMessage(" MY_TEXT ") 
      .setView(checkBoxView) 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        Uri uri = Uri.parse("market://details?id=MY_APP_PACKAGE"); 
        Intent intent = new Intent (Intent.ACTION_VIEW, uri); 
        startActivity(intent);       } 
      }) 
      .setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }).show(); 
+2

findViewByIdから返されたビューをCheckBoxにキャストする必要があると思います。そうでなければ素晴らしい答え。 – Gallal

+0

@Gallalあなたは正しいです。私はその訂正をした。 –

+1

サンプルxmlレイアウトで長いテキストを使用しないようにしてください。テキストが長すぎるとチェックボックスは非表示になります – xDragonZ

1

最初に、次のビューで警告を無効にするメッセージとチェックボックスを含むレイアウトを定義する必要があります。代わりにbuilder.setMessageを呼び出すその後、あなたが電話するよ:

builder.setView(myAlertViewWithDisablingCheckbox); 

ユーザーが警告ダイアログのボタンをクリックしたときにその後、あなたはそのチェックボックスがチェックされているかどうかを確認する必要がある、とあなたにその設定を保存しますアプリのSharedPreferences次に、この設定を使用して、このアラートダイアログを再度ユーザーに表示するかどうかを判断できます。

0

あなたの活動に

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <CheckBox 
     android:id="@+id/checkbox" 
     style="?android:attr/textAppearanceMedium" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" /> 

</FrameLayout> 

コード:

final boolean checked = new boolean {false}; 
builder.setMultiChoiceItems(new String[]{"Remember decision}, checked, new DialogInterface.OnMultiChoiceClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i, boolean b) { 
        checked[i] = b; 
       } 
      }); 

次に、あなたがchecked[0]の値をチェックして、アプリのSharedpreferencesにその値を保存することができ、アラートダイアログのボタンの:この設定では

builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialogInterface, int i) { 
         if(checked[0]){ 
          SharedPreferences.Editor editor = settings.edit(); 
          editor.putBoolean("preferences_never_buy_pro", true); 
          editor.apply(); 
         } 
         dialog.cancel(); 

        } 
       }); 

ダイアログが将来再び表示するかどうかを決定することができます。