相关疑难解决方法(0)

FragmentStatePagerAdapter IllegalStateException:<MyFragment>当前不在FragmentManager中

我在一些使用FragmentStatePagerAdapter的活动的onResume()中获得了这个.使用设备的后退按钮时.不总是.不可重复.

我正在使用支持包v4,最新修订版(8).

已经用谷歌搜索过,没有成功找到有用的答案.

在源代码中,它被抛出:FragmentManager.java

@Override
public void putFragment(Bundle bundle, String key, Fragment fragment) {
    if (fragment.mIndex < 0) {
        throw new IllegalStateException("Fragment " + fragment
                + " is not currently in the FragmentManager");
    }
    bundle.putInt(key, fragment.mIndex);
}
Run Code Online (Sandbox Code Playgroud)

但是为什么片段的索引<0呢?

实例化片段的代码:

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;

    switch(position) {
        case 0:
            fragment = MyFragment.newInstance(param1);
            break;
        case 1:
            fragment = MyFragment2.newInstance(param2, param3);
            break;
    }
    return fragment;
}

@Override
public int getCount() {
    return 2;
}
Run Code Online (Sandbox Code Playgroud)

我也无法通过源调试,因为支持包不允许我附加源,出于某种原因......但这是一个不同的问题......

android fragment

28
推荐指数
4
解决办法
2万
查看次数

在Fragment级别应用的滑动手势以及ViewPager的默认滑动已禁用

我发现了以下问题: Android:FragmentActivity中的FragmentActivity(导航栏中的Scrollview) .然而,我的这个问题是关于如何使用事务来显示片段以及以安全的方式启用滑动手势检测.注意:我发布的答案中有一个链接(这也是使用事务在容器中显示片段的有效方法,包括两个方案).请看那个.我已经尝试了一些问题,但是通过使用支持ViewPager的片段,而不是嵌套:

详情:https://moqups.com/abhsax130778@gmail.com/lc0ZOERO/p:a5d7b55eb

  1. 使用onTouchEvent和onInterceptTouchEvent使用自定义ViewPager禁用默认滑动.
  2. 声明FragmentStatePagerAdapter提供了一个片段列表,每个片段都显示在每个选项卡中.
  3. 在具有此ViewPager的main_activity的main_layout中声明Fragment.想法是在单击ViewPager_fragment上的按钮时以及当用户按下返回按钮时显示activity_fragments,然后使用添加的后堆栈事务再次显示默认的ViewPager_fragment,并在活动的BackPressed上弹出它们.因此,当后端堆栈弹出事务时,我也维护我的自定义backStack来显示/隐藏activity_fragments.

现在我想要实现的是在上面的第三点使用滑动手势进行右[从左到右]滑动.

我已经使用了GestureListener和SimpleOnGestureListener以及activity的OnTouchEvent.

我面临的问题是:

该手势在活动屏幕的位于片段下方和活动部分的部分上起作用.我希望手势有效

  1. 在片段区域中,其布局中具有多个视图.
  2. 只在左右方向.
  3. 仅从activity_fragment到ViewPager的选项卡片段,就像使用后台堆栈弹出窗口和我的自定义后台堆栈在onBakPressed/onKeyDown实现中已经完成的那样,就像历史导航一样.

我尝试了以下类,并在这样的布局中更改了我的活动片段.

My Gesture和Touch监听器扩展了框架布局:

        public class OnSwipeTouchListener extends FrameLayout {

        private final GestureDetector gestureDetector;
        private static final String TAG = "OnSwipeTouchListener";
    private Context context;
        public OnSwipeTouchListener(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.context=context;
            gestureDetector = new GestureDetector(context, new GestureListener());
            setClickable(true);

        }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            return super.onInterceptTouchEvent(ev);
        }

        @Override
        public boolean onTouchEvent(MotionEvent event) {
 gestureDetector.onTouchEvent(motionEvent);
            return super.onTouchEvent(event);
        }


        private final …
Run Code Online (Sandbox Code Playgroud)

android android-fragments swipe-gesture android-viewpager

7
推荐指数
1
解决办法
4780
查看次数