目前,当用户打开我的应用时,会打开AlertDialog
,询问他们是否要升级到专业版。我需要在CheckBox
添加AlertDialog
,以便在用户打开应用时,该应用不再显示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();
如果有人可以告诉我如何向CheckBox
添加AlertDialog
,这会使用户在打开应用时不再显示AlertDialog
,那就太棒了。
提前谢谢!
答案 0 :(得分:76)
您必须在setView(View)
对象上使用方法AlertDialog.Builder
。这将把View
传递到消息区域和按钮之间。只需使用View
对CheckBox
进行充气,然后将其传入。以下是一个示例:
checkbox.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<CheckBox
android:id="@+id/checkbox"
style="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp" />
</FrameLayout>
您的活动中的代码
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();
答案 1 :(得分:3)
您可以使用只有一个项目的多重列表:
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;
}
});
然后在警告对话框按钮的OnClick()
中,您可以检查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();
}
});
使用此首选项,您可以决定是否应该再次显示该对话框。
答案 2 :(得分:1)
首先,您需要定义包含消息的布局和用于在后续视图上禁用警报的复选框。然后,您将致电:{/ p>,而不是致电builder.setMessage
builder.setView(myAlertViewWithDisablingCheckbox);
然后,当用户点击警告对话框按钮时,您必须检查是否已选中该复选框,并将该偏好设置保存在您应用的SharedPreferences
中。然后,您可以使用该首选项来确定是否应再次向用户显示此警报对话框。
答案 3 :(得分:1)
创建复选框列表的方法是在+.0001*x
中使用c=np.random.normal(1-tf.sin(np.pi*x),1),0)
。
setMultiChoiceItems
在这里,我用硬编码对列表中的哪些项目进行了检查。您更可能希望在AlertDialog
中跟踪它们。有关更多详细信息,请参见documentation example。如果您始终希望所有内容都未选中就开始,也可以将选中的项目设置为// Set up the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose some animals");
// Add a checkbox list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
boolean[] checkedItems = {true, false, false, true, false};
builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// The user checked or unchecked a box
}
});
// Add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// The user clicked OK
}
});
builder.setNegativeButton("Cancel", null);
// Create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();
。
对于ArrayList<Integer>
,如果您处于活动状态,则可以使用null
。
我的完整答案是here。
context