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,查看更新的帖子。我仍然不知道你在这里到底想做什么。如果应用程序崩溃,请查看日志。不管怎样,你知道有一种方法吗?我会从这里着手: