Estoy usando una ViewPager con vistas dinámicas como se muestra en este link. Estoy agregando cada página al viewpager. El código para crear cada página y agregarlo al adaptador localizador es el siguienteOnClickListener of Child impidiendo el deslizamiento de Android ViewPager
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;
}
la OnClickListener para el TextView en la página es el 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 estoy enfrentando es que el ViewPager se desliza cuando deslizo la pantalla, pero si mi dedo comienza a deslizar el dedo del texto con el onclicklistener, la página no se desliza, y tampoco se llama al evento click. Si hago clic en la vista de texto, se llama al evento click. No puedo entender por qué el visor de ventanas no está volteando las páginas si el deslizamiento comienza desde la vista de texto con el evento click.
Para averiguar el motivo del error agregué un ontouchlistener al visor y encontré que se llama al evento táctil del visor cuando el deslizamiento ocurre en la parte de la página donde no hay vista de texto y el evento táctil no se llama en absoluto si el deslizamiento comienza en la parte superior de la vista de texto. Si elimino el onclicklistener de la vista de texto, todo el viewpager se voltea correctamente sin ningún problema. Entonces, 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 creación de página. La vista que creo en esta función se agrega al viewpager a través del adaptador de página como se muestra en el tutorial que mencioné al principio.
Muchas gracias por investigar y publicar esto, pensé que me estaba volviendo loco por un tiempo allí ... – avalancha
¡Gracias! Estaba buscando la razón de esto todo el día ... –
singleLine = "true" está en desuso. use maxLine = "1" en su lugar –