我创建的接口:-
我正在研究片段,并得到一个问题,当我试图回到我以前的片段上的后退按钮按下我的应用程序关闭(条件时,编辑文本集中),同样的事情很好时(编辑文本不集中)。
下面是我使用的代码:-
public static void OnBackPressHandler(View rootView,
final Fragment fragment, final String fragmentName,
final String fragmentTitle) {
rootView.setFocusableInTouchMode(true);
rootView.requestFocus();
rootView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Session.ChangeFragment(fragment, fragmentName,
fragmentTitle);
return true;
}
}
return false;
}
});
}
下面是修改片段的代码:-
public void onFragmentChange(Fragment fragment, String fragmentName,
String headerTitle) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
setHeaderTitle(headerTitle);
if (sCheckFragment != null) {
fragmentManager.popBackStack();
sCheckFragment = fragmentName;
} else {
sCheckFragment = fragmentName;
}
fragmentTransaction.replace(R.id.frame_layout_main, fragment);
fragmentTransaction.addToBackStack(fragmentName);
fragmentTransaction.commitAllowingStateLoss();
}
我还尝试过通过使用EditText.clearfocus()从编辑文本中删除焦点;但这对我没有帮助。
谢谢
最后我能够通过界面使用它,我只是做了一个界面,当用户点击他的android手机的返回按钮时,将处理我的呼叫
下面是这段代码:我创建的接口:-
public interface OnBackPressHandler {
void ChangeFragmentOnBackPress(Fragment fragment, String fragmentName,
String headerTitle);
}
然后创建它的Getter-Setter:-
private static OnBackPressHandler sBackPressHandler;
public static void ChangeFragmentOnBackPressHandler(Fragment fragment,
String fragmentName, String headerTitle) {
if (sBackPressHandler != null) {
sBackPressHandler.ChangeFragmentOnBackPress(fragment, fragmentName,
headerTitle);
}
}
public static void setBackPressHandler(
OnBackPressHandler listnerOnBackPressHandler) {
sBackPressHandler = listnerOnBackPressHandler;
}
然后我在MainActivity类中实现它这是它的覆盖方法:-public void ChangeFragmentOnBackPress(Fragment fragment,
String fragmentName, String headerTitle) {
mBackPressFragment = fragment;
mBackPressFragmentName = fragmentName;
mBackPressFragmentHeaderTitle = headerTitle;
mIsBackpressFirstTime = false;
}
然后最后我在主活动类的ONBackPress中调用它:-
public void onBackPressed() {
super.onBackPressed();
if (mIsBackpressFirstTime) {
finish();
} else {
if (mBackPressFragment != null) {
Session.ChangeFragment(mBackPressFragment,
mBackPressFragmentName, mBackPressFragmentHeaderTitle);
mBackPressFragment = null;
mBackPressFragmentName = "";
mBackPressFragmentHeaderTitle = "";
} else {
finish();
}
}
}
现在你需要从你的任何片段简单地调用这个给定的方法:-
Session.ChangeFragmentOnBackPressHandler(
new HomeFragment(),
getActivity().getResources().getString(R.string.fragment_home),
getActivity().getResources().getString(
R.string.title_fragment_home));