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
- Java.lang.NoSuchFieldError: android.support.v7.appcompat
- ¿Cómo puedo evitar métodos obsoletos y mantener la compatibilidad hacia atrás?
- Los fragmentos anidados desaparecen durante la animación de transición
- SearchView en ActionBar utilizando support-v7-appcompat
- Tomas de cajones niños vistas superpuestas
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:
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.
- Fragmento de la transición estándar sin animar
- ¿Cómo puedo saber qué versión de Android Support Library v4 utilizo?
- Error de dependencia de android-support-v4.jar
- Fragmento con ViewPager dentro de Fragmento y FragmentStatePagerAdapter resultados en Excepción (con ejemplo completo)
- Advertencia: Conflicto con dependencia 'com.android.support:support-annotations'
- Cómo elegir PreferenceFragmentCompat
- Nuevo tema incorrecto de la biblioteca de soporte de preferencias en tiempo de ejecución
- Android Support BottomSheetBehavior estado adicional anclado
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 }
- Eclipse Android Virtual Device Manager no se inicia
- ¿Existe un acceso directo para eliminar todas las sentencias de registro de un proyecto de Android realizado en Eclipse?