Utilizzo un ViewPager con viste dinamiche come mostrato in questo link. Sto aggiungendo ogni pagina al viewpager. Il codice per creare ogni pagina e inserirlo all'adattatore cercapersone è la seguenteOnClickListener di Child che impedisce lo sfioramento di 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;
}
L'OnClickListener per la TextView nella pagina è la seguente
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");
}
};
Il problema che sto affrontando è che il viewpager diapositive quando faccio scorrere lo schermo ma se il mio dito avvia lo scorrimento dal testo con onclicklistener la pagina non scorre, anche l'evento click non viene chiamato. Se clicco sulla vista del testo, viene chiamato l'evento click. Non sono in grado di capire perché il viewpager non capovolge le pagine se lo scorrimento inizia dalla visualizzazione del testo con l'evento click.
Per scoprire il motivo per il bug ho aggiunto un ontouchlistener al viewpager e ha scoperto che l'evento di tocco del viewpager viene chiamato quando il colpo avviene da parte della pagina in cui non c'è vista del testo e il tocco evento non viene chiamato affatto se lo scorrimento inizia nella parte superiore della visualizzazione del testo. Se rimuovo onclicklistener di textview, l'intero viewpager si gira correttamente senza alcun problema. Quindi il problema è che l'evento click del textview sta fermando gli eventi touch del viewpager. Per favore dimmi se sto facendo qualcosa di sbagliato nel mio codice di creazione della pagina. La vista che creo in questa funzione viene aggiunta al viewpager attraverso il pageadapter come mostrato nel tutorial che ho menzionato all'inizio.
Grazie mille per la ricerca e la pubblicazione di questo, ho pensato che stavo impazzendo per un po 'lì ... – avalancha
Grazie !!! Stavo cercando il motivo di tutto questo giorno ... –
singleLine = "true" è deprecato. usa maxLine = "1" invece –