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.

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

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

  • Cómo ocultar un elemento en un listview en Android
  • Dar etiquetas de los elementos de la lista de visualización sin el arrayadapter personalizado
  • Filtrado de la vista de lista y obtención del elemento onclick correcto
  • Cómo utilizar setEmptyView () con el diseño de lista personalizada en ListFragment
  • Cómo agregar el diseño personalizado a Arrayadapter?
  • TextView`s LinkMovementMethod bloquea el evento de toque listitem
  • Cómo utilizar notifyDataSetChanged () en el subproceso
  • Hacer el diseño lineal seleccionable como un elemento de lista en una vista de lista (Android)
  • Rellene Listview desde el origen de la matriz de cadenas, con un String ArrayAdapter
  • EditarTexto en un ListView
  • CheckedTextView no marca de selección de dibujo cuando se selecciona mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.