OnClickListener von Child verhindert den Swipe von Android ViewPager

Ich benutze einen ViewPager mit dynamischen Ansichten wie in diesem Link gezeigt . Ich füge jede Seite zum Viewpager hinzu. Der Code, um jede Seite zu erstellen und sie dem Pager-Adapter hinzuzufügen, ist wie folgt

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; } 

Der OnClickListener für die Textansicht auf der Seite ist wie folgt

  • Android: onBackPressed () wird nicht aufgerufen, wenn die Navigationsschublade geöffnet ist
  • Slide up und Slide Down Animation auf Webview in Android
  • Wie kann ich eine neue Android-Aktivität mit einem String starten?
  • Wie beurteilen Sie, ob ein .sqlite oder .sqback in Java beschädigt ist?
  • Ändern Präferenz Item Zusammenfassung Textfarbe in Android 4
  • Kann ich eine .apk mit einem anderen Zertifikat neu signieren als mit dem, was es kam?
  •   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"); } }; 

    Das Problem, das ich mir vorgestellt habe, ist, dass der Viewpager gleitet, wenn ich auf dem Bildschirm wandere, aber wenn mein Finger startet den Swipe aus dem Text mit dem onclicklistener die Seite nicht gleiten, wird auch das Klickereignis nicht aufgerufen. Wenn ich auf die Textansicht klicke, wird das Klickereignis aufgerufen. Ich kann nicht feststellen, warum der Viewpager die Seiten nicht umklappt, wenn der Swipe aus der Textansicht mit Klickereignis beginnt.

    Um den Grund für den Bug herauszufinden, fügte ich dem Viewpager einen Onlineshop hinzu und stellte fest, dass das Touch-Event des Viewpagers aufgerufen wird, wenn das Swipe auf der Seite der Seite auftritt, wo es keine Textansicht gibt und das Touch-Event nicht aufgerufen wird Alles wenn das Swipe an der Textansicht beginnt. Wenn ich den onclicklistener der textansicht beseitige, dann dreht sich der gesamte viewpager ohne jegliche Ausgabe. Also das Problem ist, dass das Klickereignis der Textansicht die Berührungsereignisse des Viewpagers stoppt. Bitte sag mir, wenn ich etwas falsch mache in meinem Erstellen Seitencode. Die Ansicht, die ich in dieser Funktion anlege, wird dem Viewpager über den Seitenadapter hinzugefügt, wie in dem oben erwähnten Tutorial gezeigt.

  • Android / phonegap performance
  • JQuery und mobile Browser-Kompatibilität?
  • Wie man benutzerdefinierte Listenansicht mit Baseadapter in Android zu aktualisieren
  • Fehler: Kann das Ziel 'android-2' nicht lösen
  • App in einer App
  • Debugging Android Apps auf die Artle Feuer
  • 2 Solutions collect form web for “OnClickListener von Child verhindert den Swipe von Android ViewPager”

    Schließlich habe ich festgestellt, dass es einen Fehler in der neuesten Version von ViewPager gibt, bei dem ein TextView mit einem Klickereignis, singleLine als true und Gravity als Center gesetzt ist, nicht die Berührungsereignisse an den ViewPager übergibt, wenn der Finger am Anfang von verschoben wird Die Textansicht. Wenn wir die singleLine als falsch machen oder die Mittlergravitation entfernen, dann werden die Ereignisse an den ViewPager weitergegeben, dann kann es schwingen. Wir können nicht sowohl die Schwerelosigkeit als auch die Setsingleline (true) für die Textansicht oder einen Button mit sinlgeline Set als wahr verwenden. Ich habe das hier als Bug gemeldet

    Weitere Informationen finden Sie unter "Quelle der Einzeilen": https://github.com/android/platform_frameworks_base/blob/7bfb1e7f46d2ed3df6cc467bccec95b5999d9cc4/core/java/android/widget/TextView.java#L7877

    Es scheint, dass es etwas von einer Lösung gibt: Sie können setMaxLines(1) anstelle von setSingleLine() und es wird ohne Beeinträchtigung des Systems funktionieren. Allerdings kann ich Ihre vorherige Antwort bestätigen , in der du sagst, dass es ein Fehler ist

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.