我尝试在几个片段中处理后退按钮(在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中其他片段的后退按钮?
答案 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();
}