- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
只是在这里学习android代码。我不确定我遗漏了什么,但我正在尝试创建一个自定义 DialogPreference
,它使用 NumberPicker
让用户选择年份。我试着关注安卓的 Settings Guide ,但我选择的值不会保存。只要我不退出应用程序,它就会保存,但如果我退出,那么当我重新启动应用程序时,它会重置为默认值。我错过了什么?
设置 Activity 代码:
public class SettingsActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}
public static class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.app_preferences);
}
}
}
app_preferences.xml(SettingsActivity 的布局)
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<EditTextPreference />
<com.NsouthProductions.gradetrackerpro.SemesterPickerPreference
android:key="MY_PICKER"
android:title="@string/year_pref_str"
android:summary="Choose a year here"
android:defaultValue="2005"
/>
</PreferenceScreen>
SemesterPickerPreference(DialogPreference 的扩展)
public class SemesterPickerPreference extends DialogPreference {
private int year;
private NumberPicker semPick;
private int DEFAULT_VALUE;
public SemesterPickerPreference(Context context, AttributeSet attrs) {
super(context, attrs);
DEFAULT_VALUE = 2003;
setDialogLayoutResource(R.layout.semester_picker_dialog);
setPositiveButtonText(android.R.string.ok);
setNegativeButtonText(android.R.string.cancel);
setDialogIcon(null);
}
@Override
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
persistInt(semPick.getValue());
}
}
@Override
protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
if (restorePersistedValue) {
// Restore existing state
year = this.getPersistedInt(DEFAULT_VALUE);
} else {
// Set default state from the XML attribute
year = (Integer) defaultValue;
persistInt(year);
}
}
@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return a.getInteger(index, DEFAULT_VALUE);
}
@Override
protected View onCreateDialogView() {
int max = 2038;
int min = 2001;
LayoutInflater inflater =
(LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.semester_picker_dialog, null);
semPick = (NumberPicker) view.findViewById(R.id.semester_picker);
// Initialize state
semPick.setMaxValue(max);
semPick.setMinValue(min);
semPick.setValue(this.getPersistedInt(DEFAULT_VALUE));
semPick.setWrapSelectorWheel(false);
return view;
}
// This code copied from android's settings guide.
private static class SavedState extends BaseSavedState {
// Member that holds the setting's value
// Change this data type to match the type saved by your Preference
int value;
public SavedState(Parcelable superState) {
super(superState);
}
public SavedState(Parcel source) {
super(source);
// Get the current preference's value
value = source.readInt(); // Change this to read the appropriate data type
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
// Write the preference's value
dest.writeInt(value); // Change this to write the appropriate data type
}
// Standard creator object using an instance of this class
public static final Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
@Override
protected Parcelable onSaveInstanceState() {
final Parcelable superState = super.onSaveInstanceState();
// Check whether this Preference is persistent (continually saved)
if (isPersistent()) {
// No need to save instance state since it's persistent, use superclass state
return superState;
}
// Create instance of custom BaseSavedState
final SavedState myState = new SavedState(superState);
// Set the state's value with the class member that holds current setting value
myState.value = year;
return myState;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
// Check whether we saved the state in onSaveInstanceState
if (state == null || !state.getClass().equals(SavedState.class)) {
// Didn't save the state, so call superclass
super.onRestoreInstanceState(state);
return;
}
// Cast state to custom BaseSavedState and pass to superclass
SavedState myState = (SavedState) state;
super.onRestoreInstanceState(myState.getSuperState());
// Set this Preference's widget to reflect the restored state
semPick.setValue(myState.value);
}
}
semester_picker_dialog.xml(我的学期/年级选择器的布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center_horizontal" >
<NumberPicker
android:id="@+id/semester_picker"
android:layout_centerInParent="true"
android:layout_width="100dip"
android:layout_height="match_parent" />
</LinearLayout>
最佳答案
你错过了 android:persistent="true"您首选项 XML 中的 XML 属性。这就是告诉首选项是否实际将其值存储到共享首选项的原因。调用 PersistInt()
显然是不够的。
关于android - 使用 NumberPicker 作为 DialogPreference。为什么我的设置不保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038030/
我有一个使用 NumberPicker 的应用程序。由于该应用程序支持旧版本的 Android,其中没有 NumberPicker 小部件可用,我必须使用 external library . 在我的
该应用程序包含两个 Activity ,FirstScreen 和 SecondScreen。 FirstScreen 包含一个 NumberPicker np1 和一个按钮 toSecondScre
我有一个 NumberPicker 实例,它按预期工作,但我需要在滚动停止时或当用户仅按下增量/减量按钮时从中获取值。我应该得到的值显示在 TextView 中。 当滚动停止/变得空闲并正确显示时,我
我在 fragment 中使用 Android SDK 级别 13 下的 NumberPicker。工作正常,但每次 Activity 开始时,光标都会在数字后面闪烁。我怎样才能摆脱闪烁的光标,我不知
我正在尝试在数字选择器中添加数据列表。我正在使用的库:https://github.com/ShawnLin013/NumberPicker对于数字选择器。 这就是它在我的应用程序中的显示方式: 正如
我正在尝试在 Android 中创建一个数字选择器,但轮子只增加 1。我想增加 0.1。我在网上查了一下,但我发现了一个格式化的浮点数组禁用了轮子。请帮助并为语法感到抱歉,我正在学习。 最佳答案 您可
我的 NumberPicker 在 setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS) 模式下关闭了 setWrapSelectorWheel(fal
我在 AlertDialog 中有一个 NumberPicker 实例化如下:final NumberPicker np = new NumberPicker(PiattoActivity.this)
我正在尝试在自定义对话框中填充 NumberPicker。目前我正在使用一种方法,该方法使用 View 并扩展另一个布局(对话框),该方法应该填充 NumberPicker 但是当我在 onCreat
我使用了一个稍微修改过的 NumberPicker,当 Activity 开始时,默认值已经被选中。这很烦人,因为它会调出键盘或调出用于剪切/复制/粘贴的对话框。我确实指示键盘保持按下状态,但它仍处于
我在一个布局中有两个数字选择器,我正在使用一个 AlertDialog Box 的布局。但是,这两个数字选择器没有用于增加/减少值的滚动条。我也无法手动输入值。谁能帮我找出错误。 对话框.xml
我找到了 2 个内置的 NumberPickers: (来源:techbooster.org) 默认情况下,它是第一个,但是当我在 AndroidManifest.xml 中添加 android:th
你好, 我遇到了这个问题:我需要我的用户在 1 到 9 之间选择一个数字,但是 NumberPicker(如上所示)看起来非常丑陋,所有其他选择也好不到哪里去。您有其他选择吗? 非常感谢... 最佳答
这个问题在这里已经有了答案: How to create a negative NumberPicker (4 个答案) 关闭 6 年前。 我正在尝试为我的 NumberPicker 使用一组数字,
我有一个关于 Android NumberPicker 的问题。当用户在 NumberPicker 上执行 Fling 时,对于每一步,都会触发 OnValueChange 的监听器。我能否以这种方式
我正在使用三个 NumberPickers 在不同的日历系统中创建一个 DatePicker,并尝试将字体设置为 NumberPicker 控件。根据 this在 SO 上发帖,我查看了 number
我正在使用 NumberPicker。但默认情况下它处于垂直模式。我可以设置为水平模式吗? 这是我的 NumberPicker: 最佳答案 在找不到解决方案后,我决定自己实现。它是带选择轮的版本,不
我想帮助我开发一个带有从 firebase 获得的列表的数字选择器,此代码现在给我一个错误,如果我删除“setMaxValue 和 MinValue”,它只会给我带来一个值。 CBSList
在 activity_main.xml 中: 在 MainActivity.java 里面的 oncreate : NumberPicker numberPicker1 = (NumberPicke
我与 NumberPicker 安全问题对话。长文本被截断。如何解决这个问题? 这是对话框的布局内容 最佳答案 我遇到了同样的问题。我设法通过给 NumberPicker 一个大的 layou
我是一名优秀的程序员,十分优秀!