如何为Android Fragment实现onBackPressed?

时间:2015-09-19 10:04:40

标签: android android-fragments android-fragmentactivity onbackpressed

我想为我的Main活动中包含的所有片段实现自定义onBackPressed方法。但是当我按下设备后,我没有得到一个钩子。我尝试在SOF中实现一些可用的东西,但它们都没有正常工作。 请帮助!

我在onCreateView上尝试了这个:

rootView.setFocusableInTouchMode(true);
rootView.requestFocus();
rootView.setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
    if( keyCode == KeyEvent.KEYCODE_BACK)
    {
        return true;
    }
    return false;
}
} );

3 个答案:

答案 0 :(得分:1)

您可以使用新的 API。

;

答案 1 :(得分:0)

这里的问题相同。我通过将actionbar title设置为fragment来解决这个问题,然后通过检查ActionBar的标题检查onBackPressed当前可见哪个片段。它不是合适的解决方案,但它对我来说非常适合。如果你有任何问题告诉我。希望它对你有用。 Thanx

答案 2 :(得分:0)

public interface OnBackPressedListener {
  boolean onBackPressed();
}

public interface OnBackPressedNotifier {
  void registerOnBackPressedListener(OnBackPressedListener listener);
  void unregisterOnBackPressedListener(OnBackPressedListener listener);
}




public class SampleActivity extends Activity implements OnBackPressedNotifier {

  List<OnBackPressedListener> onBackPressedListeners = new ArrayList<>();

  @Override
  public void registerOnBackPressedListener(OnBackPressedListener listener)   {
    if (!onBackPressedListeners.contains(listener))
        onBackPressedListeners.add(listener);
  }

  @Override
  public void unregisterOnBackPressedListener(OnBackPressedListener listener) {
    if(onBackPressedListeners.contains(listener))
        onBackPressedListeners.remove(listener);
    }

  @Override
  protected void onDestroy() {
    onBackPressedListeners.clear();
    super.onDestroy();
  }

  private boolean notifyOnBackPressed(){
      boolean handledByFragment = false;
      for (OnBackPressedListener listener : onBackPressedListeners){
          handledByFragment = listener.onBackPressed();
          if (handledByFragment)
              break;
      }
      return handledByFragment;
  }

  @Override
  public void onBackPressed() {
      if (!notifyOnBackPressed())
          super.onBackPressed();
  }

}

public class SampleFragment extends android.support.v4.app.Fragment implements OnBackPressedListener {

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    ((OnBackPressedNotifier)getActivity()).registerOnBackPressedListener(this);
}

@Override
public void onDetach() {
    ((OnBackPressedNotifier)getActivity()).unregisterOnBackPressedListener(this);
    super.onDetach();
}

@Override
public boolean onBackPressed() {
    // Handle onBackPressed
    return false;
}