0

Ich benutze einen FragmentStatePagerAdapter mit einem benutzerdefinierten ViewPager. Zuvor benutzte ich einen Standard-ViewPager und konnte alle meine Fragmente korrekt durchwischen und mit den EditTexts/Buttons und anderen Komponenten auf den verschiedenen Ansichten interagieren, allerdings musste ich einen benutzerdefinierten ViewPager erstellen, wenn ich die Swipe-Richtung beschränkte. Sobald ich den benutzerdefinierten ViewPager verwendet habe, wird alles korrekt angezeigt usw. Ich kann jedoch keinen der EditTexte/Buttons usw. anklicken.Android benutzerdefinierte ViewPager erlaubt mir nicht auf die View-Komponenten klicken

Kann jemand das Problem damit sehen? Ich gehe davon aus, dass der SignUpPager keine bestimmte Methode überschreibt oder das MotionEvent falsch behandelt .... aber keiner meiner Versuche hat funktioniert.

SignUpPager.java:

import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 


public class SignUpPager extends ViewPager{ 
    public SignUpPager(Context context){ 
     super(context); 
    } 

    public SignUpPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    private float initialXValue; 
    public SwipeDirection direction = SwipeDirection.all; 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (this.IsSwipeAllowed(event)) { 
      return super.onTouchEvent(event); 
     } 

     return false; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     if (this.IsSwipeAllowed(event)) { 
      return super.onTouchEvent(event); 
     } 
     return false; 
    } 

    private boolean IsSwipeAllowed(MotionEvent event) { 
     if(this.direction == SwipeDirection.all) return true; 

     if(direction == SwipeDirection.none)//disable any swipe 
      return false; 

     if(event.getAction()==MotionEvent.ACTION_DOWN) { 
      initialXValue = event.getX(); 
      return true; 
     } 

     if(event.getAction()==MotionEvent.ACTION_MOVE) { 
      try { 
       float diffX = event.getX() - initialXValue; 
       if (diffX > 0 && direction == SwipeDirection.right) { 
        // swipe from left to right detected 
        return false; 
       } else if (diffX < 0 && direction == SwipeDirection.left) { 
       // swipe from right to left detected 
       return false; 
       } 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
     } 

     return true; 
    } 

    public enum SwipeDirection { 
     all, left, right, none ; 
    } 
} 

In MainActivity.java schließe ich den SignUpPager zu einem FragmentStatePagerAdapter (beachten Sie, ich habe gerade die kritischen Zeilen Code für diesen Teil kopiert):

public SignUpAdapter signUpAdapter; 
public static SignUpPager pager; 

signUpAdapter = new SignUpAdapter(getSupportFragmentManager()); 
pager = (SignUpPager) findViewById(R.id.signUpViewPager); 
pager.setAdapter(signUpAdapter) 

public static class SignUpAdapter extends FragmentStatePagerAdapter{ 
.......... 
} 

sign_up .xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <signUp.SignUpPager 
     android:id="@+id/signUpViewPager" 
     android:layout_width="match_parent" 
     android:layout_height="0px" 
     android:layout_weight="1" 
    /> 
</LinearLayout> 

fragment_view.xml (Dies ist das XML für die Ansicht von whic h Ich bin nicht in der Lage, die Komponenten klicken):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/signUpLayout" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/holo_orange_dark" 
tools:context="com.example.tabbyreyez.helloworld.SignUpSecondaryController"> 

    <TextView 
     android:id="@+id/signUpDataTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/signUpData" 
     android:layout_marginTop="30dp" 
     android:layout_marginLeft="27dp" 
     android:textSize="35dp"/> 

    <TextView 
     android:id="@+id/firstNameLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="First Name:" 
     android:layout_below="@+id/signUpDataTitle" 
     android:layout_marginTop="30dp" 
     android:layout_marginLeft="10dp" 
     android:textSize="17dp"/> 

    <EditText 
     android:id="@+id/firstName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:hint="e.g. Tabraiz" 
     android:layout_below="@+id/signUpDataTitle" 
     android:layout_marginTop="18dp" 
     android:layout_marginLeft="130dp" 
     android:ems="9"/> 

    <TextView 
     android:id="@+id/lastNameLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Last Name:" 
     android:layout_below="@+id/firstNameLabel" 
     android:layout_marginTop="23dp" 
     android:layout_marginLeft="10dp" 
     android:textSize="17dp" /> 

    <EditText 
     android:id="@+id/lastName" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:hint="e.g. Malik" 
     android:layout_below="@+id/firstName" 
     android:layout_marginLeft="130dp" 
     android:ems="9" /> 

    <Button 
     android:id="@+id/signUpButton" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:text="Sign Up" 
     android:layout_below="@+id/passwd" 
     android:layout_centerHorizontal="true" 
    /> 

</RelativeLayout> 
+0

Können Sie die XML Ihrer EditTexte/Buttons einschließen, könnte das Problem dort liegen. – REG1

+0

@ REG1 Ich habe mit der XML-Datei aktualisiert – reyyez

+0

Können Sie auf die Ansichten der anderen Fragment-Layouts klicken? – REG1

Antwort

0

die folgenden in Ihrem MainActivity Versuchen Sie, die FragmentActivity verlängern sollte.

private PagerAdapter mPagerAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.setContentView(R.layout.sign_up); 
    //Initialize the pager 
    this.initialisePaging(); 
} 

/** 
* Initialize the fragments to be paged 
*/ 
private void initialisePaging() { 

    List<Fragment> fragments = new Vector<Fragment>(); 
    fragments.add(Fragment.instantiate(this, MyFragment1.class.getName())); 
    fragments.add(Fragment.instantiate(this, MyFragment2.class.getName())); 
    fragments.add(Fragment.instantiate(this, MyFragment3.class.getName())); 
    this.myPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), fragments); 
    ViewPager pager = (ViewPager) super.findViewById(R.id.signUpViewPager); 
    pager.setAdapter(this.mPagerAdapter); 
} 

Ich sehe keinen Grund, warum Sie Ihren individuellen SignUpAdapter schaffen sollen, die FragmentStatePagerAdapter erstreckt. Versuchen Sie stattdessen einfach einen PagerAdapter zu verwenden.

+0

I der SignUpPager erweitert einen ViewPager und nicht einen FragmentStatePagerAdapter. Und ich benutze einen FragmentStatePagerAdapter, da ich den Benutzer brauche, um zwischen Fragmenten auf einer horizontalen Ebene zu wischen. Wird ein PagerAdapter das gleiche Ergebnis erzielen? (p, s. Ich werde meinen eigenen Test so schnell wie möglich durchführen) – reyyez

+0

@reyyez Sorry ich meinte SignUpAdapter. Ja, verwenden Sie meinen Code, der einen PagerAdapter anstelle von Ihrem SignUpAdapter verwendet, das FragmentStatePagerAdapter erweitert, sollte es funktionieren. – REG1

+0

Wenn es für Sie funktioniert, akzeptieren Sie es bitte als Antwort :) – REG1