Получить позицию позиции из пользовательского адаптера

Поскольку 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 или любые другие способы, которые я мог бы сказать, какой из них был нажат, я буду бесконечно благодарен.

Вы можете использовать setTag для добавления int к представлению, указывающего его позицию, а затем getTag позже, используя getTag . Пример:

 @Override public View getView(int position, View convertView, ViewGroup parent) { ... // your other code here CheckBox checkbox = (CheckBox) view.findViewById(R.id.pref_check_box); checkbox.setTag(new Integer(position)); } 

Затем в вашем onCheckBoxClick :

 public void onCheckBoxClick(View view) { Integer pos; pos = (Integer) view.getTag(); ... // do what you want with `pos` here }