OnClickListener de Child que impide el golpe de vista de Android ViewPager

Estoy utilizando un ViewPager con vistas dinámicas como se muestra en este enlace . Estoy agregando cada página al viewpager. El código para crear cada página y añadirla al adaptador de buscapersonas es el siguiente

public View createPage( ) { TableLayout table = new TableLayout(mycontext); TableRow row = new TableRow(mycontext); for(int i=0; i <= num_of_views; i++) { TableLayout catTable = new TableLayout(mycontext); TableLayout.LayoutParams params = new TableLayout.LayoutParams(); params.height = LayoutParams.MATCH_PARENT; TableRow catName = new TableRow(mycontext); catName.setGravity(0x03); catName.setLayoutParams(params); TextView cat = new TextView(mycontext); TableRow.LayoutParams RowParams= new TableRow.LayoutParams(pixeltoDp(0),pixeltoDp(85)); RowParams.weight = 1; cat.setLayoutParams(RowParams); cat.setPadding(35, 0, 5, 0); cat.setGravity(0x13); cat.setSingleLine(true); cat.setHorizontallyScrolling(true); cat.setFocusable(true); cat.setFocusableInTouchMode(true); cat.setLines(1); cat.setText(data.getCats().get(i).getName()); cat.setTextColor(color); cat.setSelected(true); catName.addView(cat); catTable.addView(catName); for(int j=0; j < 5; j++) { TableRow trChild = new TableRow(mycontext); trChild.setLayoutParams(params); trChild.setGravity(0x11); for (int k=0; k<4; k++) { TextView app = new TextView(mycontext); TableRow.LayoutParams tableRowParams= new TableRow.LayoutParams(pixeltoDp(0),pixeltoDp(80)); margin = pixeltoDp(11); tableRowParams.weight = 1; app.setLayoutParams(tableRowParams); app.setGravity(0x11); app.setSingleLine(true); app.setTextSize(pixeltoDp(12)); app.setTextColor(Color.BLACK); app.setTypeface(verdana); int pos = j+(k*5); if((pos < mysize)) { Drawable icon = getMyDrawable(); app.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null); app.setText("some Name"); app.setTag(i+":"+pos); app.setEllipsize(TextUtils.TruncateAt.END); app.setOnClickListener(onMyClick); } trChild.addView(app); } catTable.addView(trChild); } TableRow.LayoutParams tableRowParams= new TableRow.LayoutParams (TableRow.LayoutParams.MATCH_PARENT,TableRow.LayoutParams.WRAP_CONTENT); margin = pixeltoDp(5); tableRowParams.setMargins(margin,0,margin, pixeltoDp(18)); catTable.setLayoutParams(tableRowParams); } row.setGravity(0x03); table.addView(row); return table; } 

El OnClickListener para la vista de texto en la página es la siguiente

  private View.OnClickListener onAppClick=new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub String gettext = (String)v.getTag(); String[] splittext = gettext.split(":"); Log.d("TAG","Click Event is Triggered"); } }; 

El problema que me enfrento es que el visor de visores se desliza cuando deslizo en la pantalla pero si mi dedo comienza el golpe del texto con el onclicklistener la página no se desliza, tampoco se llama al evento de clic. Si hago clic en la vista de texto, se llama al evento click. No puedo calcular porqué el viewpager en no dar vuelta a las páginas si el golpe comienza de la visión del texto con acontecimiento del tecleo.

Para averiguar la razón del error agregué un ontouchlistener al viewpager y encontré que el evento táctil del viewpager se llama cuando el golpe sucede en la parte de la página donde no hay ninguna opinión del texto y el acontecimiento del tacto no se llama en Todo si el golpe comienza en la parte superior de la vista de texto. Si quito el onclicklistener del textview entonces el viewpager entero se desplaza correctamente sin ningún problema. Así que el problema es que el evento click de la vista de texto está deteniendo los eventos táctiles del viewpager. Por favor, dígame si estoy haciendo algo mal en mi código de página de creación. La vista que creo en esta función se agrega al viewpager a través del pageadapter como se muestra en el tutorial que mencioné al principio.

Finalmente encontré que hay un error en la última versión de ViewPager donde un TextView con un evento de clic, singleLine establecido como verdadero y gravedad establecido como centro no pasa los eventos de toque al ViewPager si el dedo se mueve comenzando en la parte superior de La vista de texto. Si hacemos el singleLine como falso o quitar la gravedad del centro entonces los acontecimientos se pasan al ViewPager entonces puede lanzar. No podemos usar tanto la gravedad de centro como la línea de ensamblaje (true) para la vista de texto o un botón con sinlgeline establecido como verdadero. He informado esto como un error aquí

Vea la fuente 'aplicar una sola línea' aquí: https://github.com/android/platform_frameworks_base/blob/7bfb1e7f46d2ed3df6cc467bccec95b5999d9cc4/core/java/android/widget/TextView.java#L7877

Parece que hay algo de una solución: se puede usar setMaxLines(1) lugar de setSingleLine() y funcionará sin afectar el sistema. Sin embargo, puedo confirmar su respuesta anterior en la que usted dice que es un error

  • Taps rápidos (clics) en RecyclerView abre varios fragmentos
  • Cómo desmarcar un elemento en gridview en segundo clic en android?
  • ¿Cómo dejar pasar el evento a container en android?
  • Cómo implementar OnTouch Listener en XML
  • Android: Detectar el botón ACTION_UP fuera del evento
  • ¿Cómo abrir una nueva actividad haciendo clic en un elemento de listview?
  • OnClickListener para la pantalla ENTERA
  • ¿Cómo puedo tener EditText con Clickable Spannables y todavía seleccionable por longClick?
  • Android - método setOnClickListener cómo funciona?
  • setOnClickListener en un TextView dentro de un Cardview
  • ¿Cómo implementar el evento de clic en el icono de la barra de herramientas?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.