你必須做出一個自定義對話框,例如在其上設置的自定義內容視圖的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>
你試過了什麼? – 2012-03-03 21:33:40
剛編輯的主要問題。我添加了^^,但是我怎樣才能讓它添加一個「不要再問我」複選框?它實際上不顯示它? – Zukky 2012-03-03 21:40:51