我正在使用带有自定义ViewPager的FragmentStatePagerAdapter。以前我使用标准的ViewPager,我能够正确地滑动到我的所有片段,并与不同视图上的EditTexts / Buttons和其他组件进行交互,但是我必须在限制滑动方向时创建自定义ViewPager。 一旦我使用自定义ViewPager,一切都正确显示等,但我无法点击任何EditTexts / Buttons等。
有人能看到这个问题吗?我假设SignUpPager没有覆盖某个方法或错误地处理MotionEvent ....但我没有尝试过。
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 ;
}
}
在MainActivity.java中,我将SignUpPager连接到FragmentStatePagerAdapter(注意我刚刚复制了这部分的关键代码行):
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(这是我无法点击组件的视图的XML):
<?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 :(得分:0)
在MainActivity中尝试以下内容,这应该扩展FragmentActivity。
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);
}
我认为没有理由为什么要创建扩展FragmentStatePagerAdapter的自定义SignUpAdapter。相反,只需尝试使用PagerAdapter。