美文网首页
让Fragment优雅的响应返回事件

让Fragment优雅的响应返回事件

作者: 相见浮生 | 来源:发表于2017-06-20 11:13 被阅读171次

    前言

    在项目中,Fragment 使用率非常高,因此我们不可避免的会遇到在 Fragment 中处理 Back 返回键的需求。目前市面上在 Fragment 中处理 Back 返回键的方法千奇百怪,特别当 Fragment 嵌入类似 WebView 这些组件以后,处理方法更是显得奇怪。这里列举一种个人目前自己项目中所采用的方法。


    思路

    • 由于只有 Activity 能响应真正的 onBackPressed ,因此我们需要在 BaseActivity 中进行处理真正的 onBack 逻辑。
    • 在 BaseFragment 中定义一个 onBackPressed 方法,这个方法交由 BaseActivity 调用,这个方法的目的是为了让 BaseActivity 知道你的 Fragment 的回退逻辑是由 BaseActivity 来处理还是由你的 Fragment来处理。

    代码

    • BaseActivity
    
    public class BaseActivity extends AppCompatActivity {
    
        @Override
        public void onBackPressed() {
            // 得到当前Activity下的所有Fragment
            List<android.support.v4.app.Fragment> fragments = getSupportFragmentManager().getFragments();
            // 判断是否为空
            if (fragments != null && fragments.size() > 0) {
                for (Fragment fragment : fragments) {
                    // 判断是否为我们能够处理的Fragment类型
                    if (fragment instanceof BaseFragment) {
                        // 判断是否拦截了返回按钮
                        if (((BaseFragment) fragment).onBackPressed()) {
                            // 如果有直接Return
                            return;
                        }
                    }
                }
            }
            super.onBackPressed();
            finish();
        }
    }
    
    
    • BaseFragment
    
    public class BaseFragment extends Fragment {
    
        /**
         * 返回按键触发时调用
         *
         * @return 返回True代表我已处理返回逻辑,Activity不用自己finish。
         * 返回False代表我没有处理逻辑,Activity自己走自己的逻辑
         */
        public boolean onBackPressed() {
            return false;
        }
    
    }
    
    
    • WebFragment
    public class WebFragment extends BaseFragment {
    
        @Override
        public boolean onBackPressed() {
            if (mWebView.canGoBack()) {
                mWebView.goBack();
                return true;
            } else {
                return super.onBackPressed();
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:让Fragment优雅的响应返回事件

          本文链接:https://www.haomeiwen.com/subject/oeyoqxtx.html