在Android中使用的片段时,处理回preSS [英] Handling back press when using fragments in Android
问题描述
我用我的应用程序中使用抽屉式导航Android的滑动菜单和片段在应用程序,而不是活动中使用。
当我打开抽屉,点击会出现一个片段的项目。我从一个片段使用下面的code移动到另一个片段:
I am using Android Sliding Menu using Navigation Drawer in my application and Fragments are used in the app instead of Activities. When I open the drawer, click on an item a Fragment appears. I move from one fragment to another fragment using the following code:
Fragment fragment = null;
fragment = new GalleryFragment(selectetdMainMenu.getCategoryID());
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.addToBackStack("menuFrag");
ft.add(R.id.frame_container, fragment, "menuFrag");
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
在这样我可以从一个片段到另一个去,但我不来上后退按钮preSS的previous片段。我设法想出这个code处理回MainActivity preSS,其中抽屉被初始化:
In this way I can go from one fragment to another but I fail to come to the previous fragment on back button press. I managed to come up with this code to handle back press in MainActivity where Drawer is Initialized:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if (keyCode == KeyEvent.KEYCODE_BACK) {
Fragment fragment_byTag = fragmentManager.findFragmentByTag("menuFrag");
Fragment menuFragment_by_tag = fragmentManager.findFragmentByTag("galleryFrag");
Fragment commentsFrag_by_tag = fragmentManager.findFragmentByTag("commentsFrag");
Fragment dealDetail = fragmentManager.findFragmentByTag("promoFrag");
if(commentsFrag_by_tag != null){
if (commentsFrag_by_tag.isVisible()) {
Log.e("comments back ", " clicked");
//menuDetailsFrag.onBackPressed();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().remove(commentsFrag_by_tag).commit();
fragmentManager.beginTransaction().show(menuFragment_by_tag).commit();
}
}else if(menuFragment_by_tag.isVisible()){
Log.e("menu back ", " clicked");
menuDetailsFrag.onBackPressed();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().remove(menuFragment_by_tag).commit();
fragmentManager.beginTransaction().show(fragment_byTag).commit();
}
}
return false;
}
此工作在次,但失败的大部分时间。我将不胜AP preciate如果能证明导航回到一个更好的办法。
This works at times but fails most of the time. I would greatly appreciate if a better way to navigate back can be shown.
推荐答案
我通常设置 onKeyListener
到查看
在 onResume
。从我所学到的,你必须小心设置 setFocusableInTouchMode()
和 requestFocus的
在查看
。
I usually set an onKeyListener
to the View
in onResume
. From what I learned you have to take care to set setFocusableInTouchMode()
and requestFocus
on the View
.
这是我所使用的用于此目的的例子:
This is a sample of what I use for this purpose:
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
// handle back button
return true;
}
return false;
}
});
}
这篇关于在Android中使用的片段时,处理回preSS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!