android - 如何处理 ActionBarActivity fragment 中的后退按钮?

标签 android android-fragments

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

其中一个 fragment 的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 中其他 fragment 中的后退按钮?

最佳答案

onKeyDown(...) 永远不会在 fragment 中调用,因此为了处理后退按钮,您必须将代码移动到 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();

在您的 Fragment 中,getCurrentDir() 方法仅返回 currentDir 名称:

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

关于android - 如何处理 ActionBarActivity fragment 中的后退按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25508826/

相关文章:

android - GridLayoutManager spansizelookup 不工作

java - 错误 :(17, 21) 错误 : no suitable method found for add(int, ExampleItemFragment)

Android 支持警报对话框更改标题背景颜色?

android - ViewPager 中标签上方的 AdMob 横幅

java - 从 Activity 到 Fragment 执行 "Shared Element Transition"

android - 滚动 Android StickyHeaderGrid

android - App Indexing : Is using App Indexing API necessary for publishing deeplinks, 是否已被 Googlebot 提供访问权限?

android - 安装 PreferenceFragmentCompat 的支持库

android - 如何在 ListView 控件中添加 Button,ImageView 小部件,它从 sqlite 数据库中获取和显示记录

java - fragment 管理器 : popBackStack() and IllegalStateException