我试图在几个 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/