//重写返回键,判断是Fragment,按下返回键返回上一个Fragment(页面)

233 阅读1分钟
    自定义  BackHandledFragment类


public abstract class BackHandledFragment extends Fragment {

    protected BackHandledInterface mBackHandledInterface;

/** 
 * 所有继承BackHandledFragment的子类都将在这个方法中实现物理Back键按下后的逻辑 
 * FragmentActivity捕捉到物理返回键点击事件后会首先询问Fragment是否消费该事件 
 * 如果没有Fragment消息时FragmentActivity自己才会消费该事件 
 */  
public abstract boolean onBackPressed();  

@Override  
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    if(!(getActivity() instanceof BackHandledInterface)){
        throw new ClassCastException("Hosting Activity must implement BackHandledInterface");  
    }else{  
        this.mBackHandledInterface = (BackHandledInterface)getActivity();  
    }  
}  

@Override  
public void onStart() {  
    super.onStart();  
    //告诉FragmentActivity,当前Fragment在栈顶  
    mBackHandledInterface.setSelectedFragment(this);  
}

public interface BackHandledInterface {
    void setSelectedFragment(BackHandledFragment selectedFragment);
}

}

 在实现的Fragment 中 继承  BackHandledFragment类
//重写返回键,判断是Fragment,按下返回键返回上一个Fragment(页面)
@Override
public boolean onBackPressed() {

    if (stockption_webView.canGoBack()) {
        stockption_webView.goBack();
        L.e("webView.goBack()", "webView.goBack()");

        return true;

    } else {
        L.e("Conversatio退出", "Conversatio退出");

        return false;
    }
}





            在实现的Fragment的 Activity 中 实现 implements BackHandledFragment.BackHandledInterface
                    @Override
              public void onBackPressed() {
             if(mBackHandedFragment == null || !mBackHandedFragment.onBackPressed()){
              if(getSupportFragmentManager().getBackStackEntryCount() == 0){
              super.onBackPressed(); //退出
             }else{
              getSupportFragmentManager().popBackStack(); //fragment 出栈
          }
        }
      }