当编辑文本聚焦时,在片段的后按中发布



我正在研究片段,并得到一个问题,当我试图回到我以前的片段上的后退按钮按下我的应用程序关闭(条件时,编辑文本集中),同样的事情很好时(编辑文本不集中)。

下面是我使用的代码:-

	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));

最新更新