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>
Können Sie die XML Ihrer EditTexte/Buttons einschließen, könnte das Problem dort liegen. – REG1
@ REG1 Ich habe mit der XML-Datei aktualisiert – reyyez
Können Sie auf die Ansichten der anderen Fragment-Layouts klicken? – REG1