我试图在几个片段中处理后退按钮(在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();
}