我有PreferenceScreen
,其中3个首选项为TimePreferences
。 TimePreference
是一个扩展DialogPreference
的自定义类,其中包含TimePicker
。我是在THIS CODE之后创建的。
现在我想限制TimePicker
输入。每个TimePreference
都需要有一个特定的时间限制(每个TimePreference
的限制会有所不同),我将使用此限制来检查输入值。即,我可能希望第一个TimePreference
低于1小时,第二个到第5个小时,最后一个没有限制。
因为我想避免使用3个不同的类,所以我一直在寻找一种方法来将一些数据发送到首选项。我尝试使用defaultValue,但当用户选择了任何值时它为null。
我的PreferenceActivity使用PreferenceFragment
。这是他们的代码:
public class PrefsActivity extends Activity {
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content,
new PrefsFragment()).commit();
}
}
public class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs_tod);
}
}
我可以将此数据发送给偏好设置吗?或者我应该有3个不同的课程?
谢谢!
答案 0 :(得分:2)
您可以使用其他属性创建自定义偏好设置,例如limit
属性。
RES /值/ attrs.xml
<declare-styleable name="CustomPreference">
<attr name="limit" format="integer"/>
</declare-styleable>
CustomPreference.java
public class CustomPreference extends DialogPreference {
private int limit;
public CustomPreference(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomPreference, 0, 0);
limit = a.getInteger(R.styleable.CustomPreference_limit, 0);
a.recycle();
}
在偏好布局中:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example.package">
<PreferenceCategory>
<com.example.package.CustomPreference
android:key="@string/pref_key"
android:title="@string/pref_title"
app:limit="6" />
</PreferenceCategory>
</PreferenceScreen>
您还可以通过编程方式设置属性值