我很难用Dialog创建一个Preference,网站上建议的方法都不适合我。所以这就是我的第一个。在MainActivity中我有这个
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_stage_1, menu);
return true;
}
这将打开菜单,当您选择“设置”时,在下一个屏幕中只有一个首选项,从此preferences.xml创建
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<Preference
android:summary="clears all data"
android:title="Reset Data" >
<intent
android:targetClass="com.example.myapp.settings.DialogActivity"
android:targetPackage="com.example.myapp" >
</intent>
</Preference>
我希望当我单击此选项时,会出现一个带有“是”和“否”按钮的对话框,因此我可以在某处定义按钮以编程方式执行的操作。我该怎么办?
答案 0 :(得分:5)
您可以延长DialogPreference。覆盖onDialogClosed
方法,该方法在Dialog
关闭时调用。该方法的参数指示用户是选择了positive
还是negative
按钮。
CustomDialogPreference.java :
public class CustomDialogPreference extends DialogPreference {
public CustomDialogPreference(Context context, AttributeSet attrs) {
super(context, attrs);
// Set the layout here
setDialogLayoutResource(R.layout.custom_dialog);
setPositiveButtonText(android.R.string.ok);
setNegativeButtonText(android.R.string.cancel);
setDialogIcon(null);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
// When the user selects "OK", persist the new value
if (positiveResult) {
// User selected OK
} else {
// User selected Cancel
}
}
}
的preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.example.test1.CustomDialogPreference
android:key="pref_dialog"
android:title="dialog"/>
</PreferenceScreen>
您可以参考官方Settings documentation。
答案 1 :(得分:0)
在这种情况下,如果您可以使用Android Studio,则可以右键单击包含您的活动的文件夹,然后选择创建新的SettingsActivity
。
然后在MainActivity中的ActionBar的xml中,设置如下设置按钮:
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="99"
android:showAsAction="ifRoom"/>
然后为ActionBar上的Setting按钮设置Listener:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
//Start your new Activity here
return true;
}
return super.onOptionsItemSelected(item);
}
您仍然可以使用我的代码在SettingsActivity
中的监听器中构建AlertDialog。
AlertDialog.Builder alert = new AlertDialog.Builder(self);
alert.setTitle(getResources().getString(R.string.action_about));
//Set up your AlertDialog and buttons
alert.setMessage(message);
alert.setNegativeButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.setCancelable(true);
alert.show();
答案 2 :(得分:0)
如果使用v7支持库有点复杂......但我更喜欢以下内容:
首先创建偏好
<PreferenceCategory
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:title="@string/settings_absence_category_data">
<Preference
android:key="absence_data"
android:title="@string/settings_absence_data_clear"></Preference>
</PreferenceCategory>
然后绑定片段优先
Preference clear = findPreference("absence_data");
clear.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
alertForClearAbsenceData();
return true;
}
});
alertForClearAbsenceData函数,下面是alertdialog
private void alertForClearAbsenceData(){
AlertDialog.Builder alert = new AlertDialog.Builder(getMainActivity());
alert.setTitle(getString(R.string.fragment_absence_alert_title));
alert.setMessage(getString(R.string.fragment_absence_alert_message));
alert.setCancelable(false);
alert.setPositiveButton(R.string.fragment_absence_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
alert.show();
}
这是如何确认警告对话框的示例