让Fragment优雅的响应返回事件

2017-06-20  本文已影响171人  相见浮生

前言

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


思路


代码


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();
    }
}


public class BaseFragment extends Fragment {

    /**
     * 返回按键触发时调用
     *
     * @return 返回True代表我已处理返回逻辑,Activity不用自己finish。
     * 返回False代表我没有处理逻辑,Activity自己走自己的逻辑
     */
    public boolean onBackPressed() {
        return false;
    }

}

public class WebFragment extends BaseFragment {

    @Override
    public boolean onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        } else {
            return super.onBackPressed();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读