Obtener posición del artículo desde el adaptador personalizado

Dado que PreferenceFragment no está disponible en la biblioteca de soporte, he creado un ListFragment para mostrar una lista de configuraciones a un usuario ya que no tengo muchos ajustes que mostrar. También he creado un ArrayAdapter personalizado para personalizar los elementos de la lista. Tengo que manejar cuando un usuario comprueba uno de los CheckBox s para que pueda guardar el tiempo o no se comprobó. Por lo tanto, si está marcado, se mantendrá comprobado hasta que el usuario lo desmarque. Esto sería mucho más fácil si sólo había un ajuste en la lista, pero hay 2 por ahora y es posible que deba agregar más. Así que tengo que ser capaz de determinar cuál fue comprobado. Puedo manejar el cheque y uncheck bien no puedo encontrar una manera de determinar cuál estaba marcada.

EL CÓDIGO

Aquí está mi artículo de la lista:

 <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"/> 

Aquí está getView() en mi adaptador:

  @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; } 

Y aquí es donde manejo cuando se hace clic en un CheckBox que está en el 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; } } } 

Esto es lo que mi configuración se ve como:
introduzca la descripción de la imagen aquí

Lo que he intentado
1. He intentado establecer una variable en el adaptador a la posición del artículo y usar un getter para obtener la posición, pero que sólo devuelve la posición del último elemento mostrado.
2. He intentado usar algunos de los métodos en ListFragment para conseguir la posición del CheckBox pero siempre vuelven -1.
3. He hecho un montón de búsqueda y búsqueda de SO, pero no he sido capaz de encontrar una solución para conseguir que esto funcione.

Así que si alguien sabe de alguna manera que puedo obtener la posición de la CheckBox o cualquier otra forma que podría ser capaz de decir cuál fue hecho clic en estaré eternamente agradecido.

Puede utilizar setTag para agregar un int a la vista que indique su posición y, a continuación, recuperar la que más tarde use getTag . Ex:

 @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)); } 

Luego, en su onCheckBoxClick :

 public void onCheckBoxClick(View view) { Integer pos; pos = (Integer) view.getTag(); ... // do what you want with `pos` here } 
  • Uso de NavigationView desde Android Design Support Library
  • Práctica recomendada para fragmentos anidados en Android 4.0, 4.1 (<4.2) sin utilizar la biblioteca de soporte
  • Barra de herramientas Navegación Icono de Hamburger ausente
  • Establecer la posición del indicador de tabulación mediante programación en la biblioteca de soporte TabLayout
  • Enlace de datos con srcCompat
  • Uso de ShowcaseView con la aplicación v7 appcompat ActionBar
  • SetSupportProgressBarIndeterminateVisibility que genera java.lang.NullPointerException cuando se utiliza con Android 5.0 SDK (API 21)
  • IntelliJ y android.support.v7.widget.GridLayout
  • Soporte de Android lib v4 o v13
  • getSupportActionBar utilizando FragmentActivity
  • Android Support Repo 46.0.0 con Android Studio 2.3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.