如何将setAdapter或setCurrentItem与scrollview一起使用?

问题描述 投票:0回答:1

所以我最近在我的布局文件中用android.widget.ScrollView替换了我的android.support.v4.view.ViewPager,之后我也更改了我的主要活动onCreate中的代码。问题是我不能将setAdapter和setCurrentItem与scrollview一起使用。

    View background = findViewById(R.id.am_background_view);
    ScrollView scrollView = findViewById(R.id.am_view_pager);
    MainPagerAdapter adapter = new MainPagerAdapter(getSupportFragmentManager());
    scrollView.setAdapter(adapter);
    scrollView.setCurrentItem(1);
}
android android-fragments android-scrollview
1个回答
0
投票

这是一个具体的想法您可能需要GestureDetectorCompat来检测所描述方向的滑动,然后使用数据来检测运动方向并将主活动中的当前片段替换为您的相应片段,它可以是您想要的任何片段滑动方向,您也可以启用转换,使其看起来像是向任一方向滚动。

这是一个示例代码

public class MainActivity extends AppCompatActivity {

private String DEBUG_TAG = "Debug";
GestureDetectorCompat gestureDetectorCompat;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    gestureDetectorCompat = new GestureDetectorCompat(this, new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            float angle = (float) Math.toDegrees(Math.atan2(e1.getY() - e2.getY(), e2.getX() - e1.getX()));

            if (angle > -45 && angle <= 45) {
                Log.d(DEBUG_TAG, "Right to Left swipe performed");
                //here open your fragment right to left
                replaceFragments(FragmentRightToLeft.getInstance());
                return true;
            }

            if (angle >= 135 && angle < 180 || angle < -135 && angle > -180) {
                Log.d(DEBUG_TAG, "Left to Right swipe performed");
                //here open your fragment left to right
                replaceFragments(FragmentLeftToRight.getInstance());
                return true;
            }

            if (angle < -45 && angle >= -135) {
                Log.d(DEBUG_TAG, "Up to Down swipe performed");
                //here open your fragment up to down
                replaceFragments(FragmentUpToDown.getInstance());
                return true;
            }

            if (angle > 45 && angle <= 135) {
                Log.d(DEBUG_TAG, "Down to Up swipe performed");
                //here open your fragment down to up
                replaceFragments(FragmentDownToUp.getInstance());
                return true;
            }

            return false;
        }


    });
}

private void replaceFragments(Fragment fragment) {
    getFragmentManager().beginTransaction().replace(R.id.container,fragment).commit();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    gestureDetectorCompat.onTouchEvent(event);
    return true;
}

}

© www.soinside.com 2019 - 2024. All rights reserved.