1

私はPreferenceScreenその設定の3つがどこにありTimePreferencesます。TimePreferenceは を拡張するカスタム クラスDialogPreferenceであり、TimePicker. THIS CODEに従って作成しました。

今、私は入力を制限したいと思いTimePickerます。それぞれTimePreferenceに特定の時間制限が必要です (この制限は ごとに異なりますTimePreference)。この制限を使用して入力値をチェックします。TimePreferenceつまり、最初の時間は 1 時間未満、2 回目は 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つの異なるクラスが必要ですか?

ありがとう!

4

1 に答える 1

2

属性を使用して、追加の属性を使用してカスタム設定を作成できlimitます。

res/values/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>

また、プログラムで属性値を設定することもできます

于 2013-03-04T13:28:13.737 に答える