Android 编辑文本焦点()后的onResume()问题

Android 编辑文本焦点()后的onResume()问题,android,android-edittext,focus,onresume,Android,Android Edittext,Focus,Onresume,我正在使用onResume()检查用户是否按下了后退按钮,然后将用户带到某个片段 如果在EditText上禁用焦点,则工作正常。但是,如果将焦点放在编辑文本上,那么如果用户按下后退按钮,它将完成应用程序。 因此,我想启动onResume(),并根据代码将用户带到Home()片段,无论是否关注编辑文本。 如何防止此问题? 我的代码: etComment.setOnTouchListener(new View.OnTouchListener() { @Override public

我正在使用
onResume()
检查用户是否按下了后退按钮,然后将用户带到某个
片段

如果在
EditText
上禁用焦点,则工作正常。但是,如果将焦点放在编辑文本上,那么如果用户按下后退按钮,它将完成应用程序。

因此,我想启动
onResume()
,并根据代码将用户带到
Home()片段
,无论是否关注编辑文本。

如何防止此问题?

我的代码:

etComment.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View arg0, MotionEvent event) {
        // TODO Auto-generated method stub

        etComment.setFocusable(true);
        etComment.setFocusableInTouchMode(true);

        return false;
    }
});
@Override
public void onResume() {

    super.onResume();

    getView().setFocusable(true);
    getView().setFocusableInTouchMode(true);
    getView().requestFocus();
    getView().setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub

            if (event.getAction() == KeyEvent.ACTION_UP
                    && keyCode == KeyEvent.KEYCODE_BACK) {

                for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
                    fm.popBackStack();
                }

                fm.beginTransaction().add(R.id.frame, new Home()).commit();

                return true;
            }

            return false;
        }
    });
}
onResume():

etComment.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View arg0, MotionEvent event) {
        // TODO Auto-generated method stub

        etComment.setFocusable(true);
        etComment.setFocusableInTouchMode(true);

        return false;
    }
});
@Override
public void onResume() {

    super.onResume();

    getView().setFocusable(true);
    getView().setFocusableInTouchMode(true);
    getView().requestFocus();
    getView().setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub

            if (event.getAction() == KeyEvent.ACTION_UP
                    && keyCode == KeyEvent.KEYCODE_BACK) {

                for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
                    fm.popBackStack();
                }

                fm.beginTransaction().add(R.id.frame, new Home()).commit();

                return true;
            }

            return false;
        }
    });
}
@覆盖
恢复时公开作废(){
super.onResume();
getView().setFocusable(true);
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(新视图.OnKeyListener()){
@凌驾
公共布尔onKey(视图v、int keyCode、KeyEvent事件){
//TODO自动生成的方法存根
if(event.getAction()==KeyEvent.ACTION\u UP
&&keyCode==KeyEvent.keyCode(返回){
对于(int i=0;i
我认为只使用
onBackPressed()
mpaausing
mBackPressed
更好

private boolean mPausing = false;
private boolean mBackPressed = false;

@Override
protected void onPause() {
    super.onPause();
    mPausing = true;
}

@Override
protected void onResumeFragments() {
    super.onResumeFragments();
    mPausing = false;
    if (mBackPressed) {
        onBackPressed();
        mBackPressed = false;
    }
}

@Override
public void onBackPressed() {
    if (mPausing) {
        mBackPressed = true;
        return;
    }

    for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
        fm.popBackStack();
    }
    fm.beginTransaction().add(R.id.frame, new Home()).commit();
}
private=false;
私有布尔值mBackPressed=false;
@凌驾
受保护的void onPause(){
super.onPause();
mpa=true;
}
@凌驾
受保护的void onResumeFragments(){
super.onResumeFragments();
mpa=false;
如果(mBackPressed){
onBackPressed();
mBackPressed=false;
}
}
@凌驾
public void onBackPressed(){
如果(使用){
mBackPressed=true;
返回;
}
对于(int i=0;i
那你就不用担心焦点了。是否有任何理由使用
setFocusable()
方法

另外,这就是我使用的
onResume片段()
而不是
onResume()

这篇文章说:

例如,不应在FragmentActivity#onResume()方法内提交事务,因为在某些情况下,可以在还原活动状态之前调用该方法(有关详细信息,请参阅)

添加此代码

EditText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            EditText.clearFocus();
        }
        return false;
    }
});

现在还不清楚你的实际问题是什么。@Blacklight,查看更新的帖子。我仍然不知道你在这里到底想做什么。如果应用程序崩溃,请查看日志。不管怎样,你知道有一种方法吗?我会从这里着手: