2013-03-04 4 views
1

У меня есть PreferenceScreen, где 3 из них - TimePreferences. TimePreference - это специальный класс, распространяющийся на DialogPreference, и содержит TimePicker. Я создал его после THIS CODE.Android: TimePicker in PreferenceScreen: отправить данные на TimePicker

Теперь я хочу ограничить ввод TimePicker. Каждый TimePreference должен иметь определенный срок (этот предел будет различным в каждом TimePreference), и я собираюсь использовать это ограничение для проверки входных значений. Я хочу, чтобы первый TimePreference был ниже 1 часа, 2-5 часов и последний без ограничений.

Поскольку я хотел избежать 3 разных классов, я искал способ отправить некоторые данные в предпочтение. Я попытался использовать defaultValue, но он имеет значение null, когда пользователь уже выбрал любое значение.

My 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 разных класса?

Спасибо!

ответ

2

Вы можете создать пользовательские настройки с дополнительными атрибутами, в вашем случае с атрибутом limit.

Рез/значения/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> 

Также вы можете установить значение атрибута программно

+0

Это exa Что мне нужно. Благодаря! :) –