Desplazar una Galería activa el estado presionado y elimina el escucha de clics de los sub-elementos
Tengo una galería de artículos bastante complicados. Cada elemento se compone de una imagen y 2 botones. Cuando la galería carga todo funciona, los botones hacen lo que se supone que, y el estado presionado para los botones sólo sucede en la presión real de los botones.
Sin embargo, tan pronto como desplazo la galería, los botones dejan de funcionar y hacer clic en cualquier lugar permite el estado presionado para los botones.
- Adaptador con hasStableIds utilizando GUID o Strings como Ids
- ClassCastException no puede convertir LinearLayout $ LayoutParams a AbsListView $ LayoutParams al establecer ListView Header
- ¿Cómo puedo añadir un encabezado pegajoso a mi ListView?
- OnItemClickListener no funciona con el elemento ListView que contiene el botón
- Cómo desplazarse y desplazarse hasta el último en Appium
He intentado incrustar todo en un LinearLayout que no pase en eventos OnDown según esta respuesta sin embargo, esto apenas bloquea acontecimientos del tecleo.
Soy consciente de que Gallery no es el widget ideal para arreglos complicados como este, pero me pregunto si hay una solución mejor para este problema.
ACTUALIZAR:
Voy a tratar de explicar la arquitectura un poco. Tengo un FragmentActivity que contiene un ListFragment, que se compone de apenas un ListView.
El ListView se compone de grupos de elementos más pequeños (Bettable) junto con algunos meta información. Estos grupos se implementan como Gallerys. Específicamente he ampliado Galería (llamado OneGallery), que hace varias cosas, se asegura de que sólo un elemento se desplaza a la vez, y también transforma los elementos de la galería como el desplazamiento está sucediendo. Aquí está el código para eso
Aquí está el adaptador para la Galería
Y aquí está el código para el diseño de la apuesta
- El clic de listitem personalizado no activa listview.onclicklistener
- ¿Cómo puedo permitir que un usuario reordene los elementos en una lista?
- Programe seleccionar el elemento ListView en Android
- Cómo agregar espacio entre los elementos de android listview?
- Sin elástico Desplazamiento en ListView
- Mostrar diálogo en fragmento android
- Android - Cómo pulsar el elemento ListView mediante programación
- Agregar CheckBox a la vista de fila ListView hace que la fila no haga clic
Intente agregar un nuevo diseño de contenedor alrededor de la vista secundaria y anule el setPressed. La galería dejará de pasar su estado sobre los niños y el comportamiento indeseado mencionado que usted describe será fijo.
Esto es el reciclaje de las vistas. Intente utilizar el patrón de ViewHolder y configurar el estado del elemento para cada llamada getView. Si desea hacerlo, debe mantener el estado de la vista en su objeto complejo. Por ejemplo, su objeto complejo contiene TextView, ImageView y CheckBox
public View getView(int position, View convertView, ViewGroup parent) { ComplexObject co = objects.get(position); // A ViewHolder keeps references to children views to avoid unneccessary calls // to findViewById() on each row. ViewHolder holder; // When convertView is not null, we can reuse it directly, there is no need // to reinflate it. We only inflate a new View when the convertView supplied // by ListView is null. if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, null); // Creates a ViewHolder and store references to the two children views // we want to bind data to. holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); holder.checkbox = (CheckBox)convertView.findViewById(R.id.checkbox); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } // Bind the data efficiently with the holder. holder.text.setText(co.getText()); holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); holder.checkbox.setChecked(co.isChecked()); holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { co.setChecked(isChecked); } }); return convertView; } protected class ViewHolder{ TextView text; ImageView icon; CheckBox checkbox; }
Espero que sea útil