Поскольку PreferenceFragment
не поддерживается в библиотеке поддержки, я создал ListFragment
, чтобы показать список настроек для пользователя, так как у меня нет большого количества настроек для показа. Я также создал обычай ArrayAdapter
для настройки элементов списка. Мне нужно обработать, когда пользователь проверяет один из CheckBox
s, поэтому я могу сохранить погоду или нет. Поэтому, если его проверили, он будет проверяться до тех пор, пока пользователь не отметит его. Это было бы намного проще, если бы был только один параметр в списке, но сейчас есть 2, и мне, возможно, потребуется добавить больше. Поэтому мне нужно определить, какой из них был проверен. Я могу обработать чек и снять флажок, я просто не могу найти способ определить, какой из них был проверен.Позиция Позиция От пользовательского адаптера
КОД
Вот мой список элементов:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="horizontal">
<TextView android:id="@+id/pref_edit_text" android:layout_width="0dp" android:layout_height="30dp"
android:layout_weight="5"/>
<CheckBox android:id="@+id/pref_check_box" android:layout_width="0dp" android:layout_height="wrap_content"
android:layout_weight="1" android:onClick="onCheckBoxClick"/>
</LinearLayout>
<TextView android:id="@+id/pref_edit_text2" android:layout_width="match_parent"
android:layout_height="50dp"/>
Вот в моем адаптере getView()
:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//mIntCheckBoxPosition = position;
Typeface tf = Typeface.createFromAsset(mMainActivity.getAssets(), "fonts/ArchitectsDaughter.ttf");
LayoutInflater inflater = mMainActivity.getLayoutInflater();
View view = inflater.inflate(mIntLayoutId, parent, false);
TextView text = (TextView) view.findViewById(R.id.pref_edit_text);
text.setText(mStringArrayTitle[position]);
text.setTypeface(tf, Typeface.BOLD);
text = (TextView) view.findViewById(R.id.pref_edit_text2);
text.setText(mStringArraySubTitle[position]);
text.setTypeface(tf);
mMainActivity.setTitle("Settings");
return view;
}
А вот где я обращаться когда CheckBox
щелкают, который находится в ListFragment
:
public void onCheckBoxClick(View view) {
boolean isChecked = ((CheckBox) view).isChecked();
Editor editor = mMainActivity.getSharedPreferences(PREF_KEY_CHECK_BOX, Activity.MODE_PRIVATE).edit();
switch (view.getId()) {
case R.id.check_box :
if (isChecked) {
editor.putBoolean(PREF_KEY_ROUNDING, true).commit();
}
else {
editor.putBoolean(PREF_KEY_ROUNDING, false).commit();
}
break;
}
}
}
Вот что мои настройки выглядят следующим образом:
ЧТО Я Пытался
1. Я попытался установить переменный в адаптере на позицию позиции и с помощью геттера, чтобы получить позицию, но это возвращает только позицию последнего показанного элемента.
2. Я попытался использовать некоторые из методов в ListFragment
, чтобы получить позицию CheckBox
, но они всегда возвращают -1.
3. Я много сделал для Googling и искал SO, но я не смог найти решение, чтобы заставить его работать.
Так что, если кто-нибудь знает, как я могу получить позицию CheckBox
или любым другим способом, я могу сказать, на какой из них был нажат Я буду вечно благодарен.
Любая причина, вы не можете использовать Action SherlockBar? это сэкономит вам много головной боли, так как у него довольно много шаблонов для фрагмента настроек. Плюс родной вид 4.0. –