如何从Viewpager subFragment

时间:2016-04-30 04:15:59

标签: android android-fragments android-viewpager

我正在尝试从ViewPager subFragment实现 onBackPressed() 。我有一些问题。我做了两个人的倾听和实施。但它仅适用于片段B.但是当我从片段B中删除实现时,onBackPressed()为片段A工作。我做错了什么?任何帮助apraciete!

结构

Structure



我做了听众

public interface OnBackPressedListener {
public void onBackPressed();

}

在主要活动中使用此监听器

public void setfragmentclick(OnBackPressedListener ob){
    onBackPressedListener = ob;
}

@Override
    public void onBackPressed() {
        onBackPressedListener.onBackPressed();

    }

在Fragment中实现OnBackPressedListener接口

MainActivity mainActivity = new MainActivity();
mainActivity.setfragmentclick(this);

....

@Override
    public void onBackPressed() {
        if (getChildFragmentManager().getBackStackEntryCount() > 0) {
            getChildFragmentManager().popBackStack();
        }
    }

在Fragment B中还实现了OnBackPressedListener接口

 MainActivity mainActivity = new MainActivity();
    mainActivity.setfragmentclick(this);
    ....

     @Override
            public void onBackPressed() {
                if (getChildFragmentManager().getBackStackEntryCount() > 0) {
                    getChildFragmentManager().popBackStack();
                }
            }

1 个答案:

答案 0 :(得分:0)

我发现了另一种从ViewPager sub Fragment实现onBack的方法。如果您在ViewPager中有子片段,最好的方法是在父片段的 onResume 中使用 KeyEvent.KEYCODE_BACK 有子片段使用这个:

 @Override
public void onResume() {
    super.onResume();
    getView().setFocusableInTouchMode(true);
    getView().requestFocus();
    getView().setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
                if (getChildFragmentManager().getBackStackEntryCount() > 0) 
                    getChildFragmentManager().popBackStack();

                return true;
            }
            return false;
        }
    });
}