android - 如何删除 fragment onFling手势Android

标签 android android-fragments

大家好 在我的应用程序中,我有一个可以添加许多 fragment 的 Activity 。 fragment 由包含 96x96 缩略图的单个 ImageView 组成,它们以网格布局放置。我想要的是在检测到 onFling 手势时删除特定 fragment 。

这是我的尝试。我有

public class BlankFragment extends Fragment
{
    ImageView image;
    GestureDetector mDetector;
    GestureDetector.OnGestureListener gestureListener;
    public BlankFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        cr = getActivity().getContentResolver();
        mDetector = new GestureDetector(getActivity().getApplicationContext(),new MyFlingGesture());
        image = new ImageView(getActivity().getApplicationContext());

        image.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                mDetector.onTouchEvent(motionEvent);
                return true;
            }
        });


        return image;
    }
    class MyFlingGesture extends GestureDetector.SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.remove(// what to pass here);
            // or what is the other ways?
            return super.onFling(e1, e2, velocityX, velocityY);
        }
    }

}

如果我在手机上进行测试,我能够检测到 Fling 手势。如何删除该 fragment ?

最佳答案

如果您的 fragment 在后台堆栈中,只需调用 finish() 即可。如果您不将 fragment 放在 backstack 上,或者您只是想确保它有效,请使用:

首先您需要添加一个字段 来存储 Activity fragment 。在您的 BlankFragment 类中添加

public BlankFragment mBlankFragment;

oncreateview中添加

mBlankFragment = this;

现在你可以在fling监听器中使用这个变量了

 getActivity().getFragmentManager().beginTransaction().remove(mBlankFragment).commit();

另一种方法是使用像这样的函数找出 Activity fragment 是什么

public Fragment getVisibleFragment(){
    FragmentManager fragmentManager = getActivity().getFragmentManager();
    List<Fragment> fragments = fragmentManager.getFragments();
    for(Fragment fragment : fragments){
        if(fragment != null && fragment.isVisible())
            return fragment;
    }
    return null;
}

关于android - 如何删除 fragment onFling手势Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369142/

相关文章:

java - 如何动态地使这个子 Fragment 的 TextView 可见/不可见?

java - TextView 无法转换为 EditText

android - 为什么我的 RelativeLayout 中 ImageView 的顶部和底部都有空白?

android - 替换 fragment 时出现 IllegalStateException

android - 如何使用 FragmentPagerAdapter 在 fragment 之间滑动

android - 单击文本字段后底部的约束布局按钮不可见

Android:显示 SlidingMenu (jfeinstein) 时完成 Activity

android - HiltWorkerFactory : Configure WorkManagerInitializer at AppStartup

android - 当应用程序处于后台或被杀死时 FCM onMessageReceived() 未调用

java - 安卓+Appium : Scroll inside ListView to specific position and click on it