2017-03-01 54 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 
      } 
     }`