2014-01-23 37 views
-1

我寫一個Android應用程序onClickListener只有後軟鍵盤按

我設置editText.setOnClickListener(...)

,但我看到所謂,當用戶點擊軟鍵盤被打開,只有

當用戶點擊一個鍵盤鍵時--被調用。

如何捕捉到點擊軟鍵盤打開之前?

我想避免鍵盤開幕。

這裏是我的代碼:在調試過程中,我看到這條線被稱爲兩次

mPhoneNumberField.setInputTextOnClickListener(new OnClickListener() {

雖然它是從的onCreate,只叫

public class PhoneLoginFillInField extends LinearLayout { 
.. 
    public void setInputTextOnClickListener(OnClickListener onClickListener) 
    { 
     mInputText.setOnClickListener(onClickListener); 
    } 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.phone_login); 
    initMembers(); 
    setOnClickListeners(); 
    initFieldsTexts(); 
    setKeyboardVisibilityListener(); 
} 

private void setOnClickListeners() { 

    mPhoneNumberField.setInputTextOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      setResult(RESULT_CANCELED); 
      finish(); 
     } 
    }); 

} 

和有setOnClickListeners();被稱爲

+0

所以你不想鍵盤打開,當你點擊的EditText? –

+0

我想將用戶移動到另一個視圖,而不是 –

+0

能否請您發佈您的代碼更好地理解 –

回答

0

將onTouchListener設置爲EditView。請記住返回true以避免事件傳播。

+0

爲什麼我們沒有在'公共無效的onClick(視圖v)'布爾回報?你能更好地解釋這個傳播問題嗎? –

+0

View.onTouch方法返回「如果偵聽器已使用該事件,則返回true,否則返回false」。在第二種情況下,事件將被傳播到視圖層次結構,以便父視圖可以自己處理事件。在你的情況下,你將在你的editText中使用這個事件,所以你必須在onTouch方法中返回true。 – ladu

+0

爲什麼我們在public void onClick(View v)中沒有布爾返回? –

1

你的意思是EditText上不應該獲得焦點;它只需要響應點擊事件。這樣做:

editText.setFocusableInTouchMode(false); 

,然後進行:

editText.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // Your code... 
    } 
} 
+0

順便說一句,當調試我看到設置onClickListener的代碼被執行兩次。雖然它只是從「onCreate」中調用過的。怎麼來的? –

+0

不應該設置兩次。如果您正在Eclipse中進行調試,並且您在設置onClickListener的位置以及按Step Over(F6)時有一個斷點,則您會看到它使您保持在同一行上,因此無需擔心。它只是初始化新的OnClickListener,然後將其設置爲您的EditText。我認爲Android Studio和InteliJ的行爲是一樣的。另一方面,如果它真的執行了重寫onClick()方法中的代碼兩次,那麼確實存在問題。您應該發佈代碼以獲取更多幫助。 – Bandreid

+0

添加了我的代碼。謝謝 –