Как открыть всплывающее окно диалога "Не спрашивайте меня снова"? Android
Я пытаюсь создать диалоговое окно "подсказка", которое информирует пользователя о включении GPS на своем телефоне, уменьшит срок службы батареи. Я хочу, чтобы он всплывал, но имеет флажок, который говорит: "Не спрашивайте меня снова".
Как мне создать это в Android?
Спасибо,
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 inaccurate but saves on " +
"battery! Switch GPS on for better accuracy " +
"but remember it uses more battery!");
Ответы
Ответ 1
EDIT: Остерегайтесь! Дублирование кода вперед. Поскольку я больше не разрабатываю Android, я не могу реорганизовать код ниже.
Он устанавливает значение в Android Preferences и проверяет его, будет ли он показывать диалог или нет.
checkbox.xml в ресурсах/макетах
<?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>
Activity.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();
}
}
![As you can see, I did "copy and paste" too. Changed only the message strings. It works beautifully.]()
Ответ 2
Вам нужно будет создать настраиваемый диалог, например AlertDialog
, на котором вы установили пользовательский просмотр содержимого (с setView()
). Этот пользовательский макет может быть TextView
(для представления информации) + a CheckBox
(с помощью Do not ask me again
). В OnClickListener
, установленном для кнопки диалога, вы получите состояние этого CheckBox
, и если пользователь проверил его, чем вы установили флаг в настройках (например, логическое значение true).
В следующий раз, когда пользователь откроет приложение, вы проверите это логическое значение из настроек и, если оно установлено в true, вы не увидите диалоговое окно, иначе пользователь не проверил CheckBox
, чтобы вы показали ему снова.
Изменить пример приложения:
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();
}
}
});
}
}
И макет содержимого диалогового окна (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>
Ответ 3
У меня есть меньшее решение для кода. Это не идеально, потому что описание не может быть использовано, и только информация может быть передана как заголовок диалога. MultiChoiceItem используется для флажка.
в res/values /strings.xml:
<string-array name="do_not_show_again_array">
<item>Do not show again.</item>
</string-array>
Затем мой код выглядит следующим образом:
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();
}
Ответ 4
hi я после учебник, и я нашел этот код
вы можете использовать этот код ниже:
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();
Ответ 5
У меня есть ясность и правильный подход для этого вопроса
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();
}
}
} ``