我试图在几个片段中处理后退按钮(在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其他片段中的后退按钮吗?

最佳答案

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

10-08 17:32