2017-03-01 30 views
0

我实现了我的片段是这样的:上回用户点击按钮时,它都会进入这个函数:的EditText焦点不会允许我这样做onKeyBack

public void onResume() 
{ 
    super.onResume(); 

    if(getView() == null) 
    { 
     return; 
    } 

    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) 
      { 
       Fragment fragment = new FlightPerformanceFragment(); 

       manager.beginTransaction().replace(R.id.content_main,fragment).commit(); 

       Log.e("resume","resume FlightPerformance"); 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

只要有这工作好不是editText的重点。 我已经搜查了很多,我尝试以这种方式来解决这个问题,使用OnKeyListener

View.OnKeyListener onKeyListener = new View.OnKeyListener() 
    { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) 
     { 
      if (event.getAction() == KeyEvent.ACTION_DOWN) 
      { 
       //check if the right key was pressed 
       if (keyCode == KeyEvent.KEYCODE_BACK) 
       { 
        if(v == tasET) 
         tasET.clearFocus(); 
        else if(v == rhoET) 
         rhoET.clearFocus(); 

        return true; 
       } 
      } 
      return false; 
     } 
    }; 

tasET = (EditText) rootView.findViewById(R.id.paisaET); 
tasET.setOnKeyListener(onKeyListener); 

的问题是,有时方法clearFocus()重新开启以前EDITTEXT并没有明确的焦点在每一个editText。

所以,如果这种方法似乎有点复杂做简单的后台操作(我不能使用onBackPressed(),因为我需要替换其他片段),是否还有一个最简单的方法来做到这一点?

谢谢你的帮助。

+0

http://stackoverflow.com/questions/3940127/intercept-back-button-from-soft-keyboard/5811630#5811630 – peter

+0

软键盘上进行后面的点击动作@peter我刚刚尝试过但未解决问题 – ste9206

+0

您的活动是否在'Manifest.xml'文件中定义了windowSoftInputMode属性? – blueware

回答

1

创建的是定制EDITTEXT和

public class MyEdittext extends EditText 
{ 
public MybusinessEdittext(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

private KeyImeChange keyImeChangeListener; 

public void setKeyImeChangeListener(KeyImeChange listener) { 
    keyImeChangeListener = listener; 
} 

public interface KeyImeChange { 
    void onKeyIme(int keyCode, KeyEvent event); 
} 

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if (keyImeChangeListener != null) { 
     keyImeChangeListener.onKeyIme(keyCode, event); 
    } 
    return false; 
} 
} 


//perform back click action on soft keyboard 
myEdittext.setKeyImeChangeListener(new MybusinessEdittext.KeyImeChange() { 
     @Override 
     public void onKeyIme(int keyCode, KeyEvent event) { 
      if (KeyEvent.KEYCODE_BACK == event.getKeyCode()) { 
       //do something here 
      } 
     }` 
相关问题