¿Cómo hacer una ventana emergente de diálogo "no me preguntes otra vez"? Androide

Estoy tratando de crear una "sugerencia" cuadro de diálogo que informa al usuario sobre la habilitación GPS en su teléfono disminuirá la vida de la batería. Quiero que pop-up, pero tienen una casilla de verificación que dice: "No me preguntes de nuevo".

¿Cómo hago para crear esto en Android?

Gracias,

Zukky.

AlertDialog.Builder prompt = new AlertDialog.Builder(this); prompt.setCancelable(false); prompt.setTitle("Warning"); prompt.setMessage ("HINT: Otherwise, it will use network to find" + "your location. It's inaccurate but saves on " + "battery! Switch GPS on for better accuracy " + "but remember it uses more battery!"); 

5 Solutions collect form web for “¿Cómo hacer una ventana emergente de diálogo "no me preguntes otra vez"? Androide”

EDIT : ¡Cuidado! Duplicación de código por delante. Ya que ya no estoy desarrollando para Android, no puedo refactorizar el código de abajo.

Establece un valor en Preferencias de Android y lo comprueba si muestra o no el diálogo.

Checkbox.xml en recursos / diseños

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:padding="10dp" > <CheckBox xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/skip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Ok please do not show again." > </CheckBox> </LinearLayout> 

Actividad.java

 public class MyActivity extends Activity { public static final String PREFS_NAME = "MyPrefsFile1"; public CheckBox dontShowAgain; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override protected void onResume() { AlertDialog.Builder adb = new AlertDialog.Builder(this); LayoutInflater adbInflater = LayoutInflater.from(this); View eulaLayout = adbInflater.inflate(R.layout.checkbox, null); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); String skipMessage = settings.getString("skipMessage", "NOT checked"); dontShowAgain = (CheckBox) eulaLayout.findViewById(R.id.skip); adb.setView(eulaLayout); adb.setTitle("Attention"); adb.setMessage(Html.fromHtml("Zukky, how can I see this then?")); adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String checkBoxResult = "NOT checked"; if (dontShowAgain.isChecked()) { checkBoxResult = "checked"; } SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("skipMessage", checkBoxResult); editor.commit(); // Do what you want to do on "OK" action return; } }); adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String checkBoxResult = "NOT checked"; if (dontShowAgain.isChecked()) { checkBoxResult = "checked"; } SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("skipMessage", checkBoxResult); editor.commit(); // Do what you want to do on "CANCEL" action return; } }); if (!skipMessage.equals("checked")) { adb.show(); } super.onResume(); } } 

Como se puede ver, hice "copiar y pegar" también. Cambió sólo las cadenas de mensajes. Funciona maravillosamente.

Deberá crear un cuadro de diálogo personalizado, por ejemplo un AlertDialog en el que se establezca una vista de contenido personalizada (con setView() ). Ese diseño personalizado podría ser un TextView (para presentar la información) + un CheckBox (con Do not ask me again ). En el OnClickListener configurado para el botón de diálogo obtendrá el estado de ese CheckBox y si el usuario lo comprueba, se establece un indicador en las preferencias (valor booleano de true, por ejemplo).

La próxima vez que el usuario utilice la aplicación verá que el valor booleano de las preferencias y si se establece en true, entonces no mostrará el diálogo de lo contrario el usuario no marcó el CheckBox para que le muestre el diálogo de nuevo.

Editar aplicación de ejemplo:

 import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.Toast; public class DoNotShowDialog extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button action = new Button(this); action.setText("Start the dialog if the user didn't checked the " + "checkbox or if is the first run of the app."); setContentView(action); action.setOnClickListener(new OnClickListener() { public void onClick(View v) { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(DoNotShowDialog.this); boolean dialog_status = prefs .getBoolean("dialog_status", false);//get the status of the dialog from preferences, if false you ,ust show the dialog if (!dialog_status) { View content = getLayoutInflater().inflate( R.layout.dialog_content, null); // inflate the content of the dialog final CheckBox userCheck = (CheckBox) content //the checkbox from that view .findViewById(R.id.check_box1); //build the dialog new AlertDialog.Builder(DoNotShowDialog.this) .setTitle("Warning") .setView(content) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int which) { //find our if the user checked the checkbox and put true in the preferences so we don't show the dialog again SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(DoNotShowDialog.this); SharedPreferences.Editor editor = prefs .edit(); editor.putBoolean("dialog_status", userCheck.isChecked()); editor.commit(); dialog.dismiss(); //end the dialog. } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int which) { //find our if the user checked the checkbox and put true in the preferences so we don't show the dialog again SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(DoNotShowDialog.this); SharedPreferences.Editor editor = prefs .edit(); editor.putBoolean("dialog_status", userCheck.isChecked()); editor.commit(); dialog.dismiss(); } }).show(); } else { //the preferences value is true so the user did checked the checkbox, so no dialog Toast.makeText( DoNotShowDialog.this, "The user checked the checkbox so we don't show the dialog any more!", Toast.LENGTH_LONG).show(); } } }); } } 

Y el diseño del contenido del diálogo ( R.layout.dialog_content ):

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Enabling GPS on your phone will decrease battery life!" /> <CheckBox android:id="@+id/check_box1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Do not ask me again!" /> </LinearLayout> 

Tengo mi solución de código menos. No es perfecto, porque la descripción no se puede utilizar y sólo la información se puede pasar como un título del diálogo. MultiChoiceItem se utiliza para la casilla de verificación.

En res / values ​​/ strings.xml:

 <string-array name="do_not_show_again_array"> <item>Do not show again.</item> </string-array> 

Entonces mi código se ve como sigue:

 DialogInterface.OnClickListener dialogClickListener = new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do something here } }; final AlertDialog.Builder builder = new AlertDialog.Builder(activity); AlertDialog alertDialog = builder.setTitle("Title/Description") .setMultiChoiceItems(R.array.do_not_show_again_array, null, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { appPrefs.setLocationOnStart(!isChecked); } }) .setPositiveButton("Ja", dialogClickListener) .setNegativeButton("Nein", dialogClickListener).show(); } 

Hola seguí un tutorial y encontré este código
Puede utilizar este código a continuación:

  AlertDialog.Builder adb= new AlertDialog.Builder(this); LayoutInflater adbInflater = LayoutInflater.from(this); View eulaLayout = adbInflater.inflate (R.layout.activity_main, null); check = (CheckBox) eulaLayout.findViewById(R.id.skip); adb.setView(eulaLayout); adb.setTitle("Example:"); adb.setMessage(Html.fromHtml("Type your text here: ")); adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String checkBoxResult = "NOT checked"; if (check.isChecked()) checkBoxResult = "checked"; SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("noshow", checkBoxResult); // Commit the edits! // sunnovalthesis(); editor.commit(); return; } }); adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String checkBoxResult = "NOT checked"; if (check.isChecked()) checkBoxResult = "checked"; SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("noshow", checkBoxResult); // Commit the edits! // sunnovalthesis(); editor.commit(); return; } }); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); String noshow = settings.getString ("noshow", "NOT checked"); if (noshow != "checked" ) adb.show(); 

Tengo un enfoque claro y correcto para esta pregunta

 package com.example.user.testing; import android.content.DialogInterface; import android.content.SharedPreferences; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.CheckBox; public class MainActivity extends AppCompatActivity { CheckBox dontShowAgain; public static final String PREFS_NAME = "MyPrefsFile1"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this); LayoutInflater adbInflater = LayoutInflater.from(MainActivity.this); View eulaLayout = adbInflater.inflate(R.layout.checkbox, null); dontShowAgain = (CheckBox) eulaLayout.findViewById(R.id.skip); adb.setView(eulaLayout); adb.setTitle("Attention"); adb.setMessage("Your message here"); adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("skipMessage", dontShowAgain.isChecked()); editor.commit(); dialog.cancel(); } }); adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); Boolean skipMessage = settings.getBoolean("skipMessage", false); if (skipMessage.equals(false)) { adb.show(); } } 

Todos los derechos reservados

  • Telephony.Sms.Inbox.PERSON utiliza Contacts.People._ID obsoletos
  • ¿Cómo puedo cambiar el comportamiento del modo de avión de Android para que no apague la radio celular?
  • Cambiar el tamaño de un mapa de bits
  • OnCreateView () en Fragment no se llama inmediatamente, incluso después de FragmentManager.executePendingTransactions ()
  • Java: Eficaz ArrayList filtrado?
  • ¿Por qué el cargador de clases de Android permite un acceso reflexivo al campo público de una clase privada de paquete de otro paquete?
  • ActiveAndroid Relación de muchos a muchos
  • No se pudo ejecutar dex y Conversión al formato Dalvik.
  • Decompile archivos .smali en un APK
  • Android Development: Tener un AsyncTask en un archivo de clase por separado
  • Cómo ejecutar dos bucles FOR al mismo tiempo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.