如何在ActionBarActivity中处理片段中的后退按钮?

时间:2014-08-26 14:49:38

标签: android android-fragments

我尝试在几个片段中处理后退按钮(在ActionBarActivity中),但它没有用。

其中一个片段的onKeyDown():

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if ((!currentDir.getName().equals("sdcard")) && (currentDir.getParentFile() != null)) {
            currentDir = currentDir.getParentFile();
            fill(currentDir);
             Log.v(TAG,"true." );
        } else {
            getActivity().finish();
             Log.v(TAG,"false." );
        }
        return false;
    }
    return super.getActivity().onKeyDown(keyCode, event);
}

有人能告诉我怎么做以及如何处理ActionBarActivity中其他片段的后退按钮?

1 个答案:

答案 0 :(得分:1)

永远不会在片段中调用

onKeyDown(...),因此为了处理后退按钮,您必须将代码移动到 ActionBarActivity 。除此之外,我建议您使用onBackPressed()方法。这是因为如果按住后退按钮,onKeyDown方法将被调用两次(*无需进一步修改)。

因此,您在ActionBarActivity中的最终代码如下所示:

@Override
public void onBackPressed(){
  if ((!currentDir.getName().equals("sdcard")) && (currentDir.getParentFile() != null)) {
      currentDir = currentDir.getParentFile();
      fill(currentDir);
      Log.v(TAG,"true." );
  } else {
      getActivity().finish();
      Log.v(TAG,"false." );
  }
  super.onBackPressed();
}

修改

要在 ActionBarActivity 中调用 Fragment 的getter-Method,您可以在Activity中执行以下操作:

    FragmentManager fragmentManager = getFragmentManager();
    Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_pane); // The id of your container
    if (currentFragment instanceof MyFragment) {
        // Cast the Fragment to your Fragment so that you can access the public method
        currentDirName = ((MyFragment) currentFragment).getCurrentDir();
    } else if (currentFragment instanceof MyOtherFragment)
        currentDirName = ((MyOtherFragment) currentFragment).getCurrentDir();

在你的片段中,getCurrentDir() - 方法只返回currentDir名称:

public String getCurrentDir(){
  return currentDir.getName();
}