2014-04-25 54 views
2

我有四個AutoCompleteTextView(ACTV),他們工作得很好。我創建了一個onClickListener(),讓他們知道用戶何時在任何時間點選擇/按下這四個中的任何一個。然而,經過仔細檢查,我發現我必須在觸發前點擊兩次ACTV。Android - AutoCompleteTextView onClickListener在第二次點擊後工作

這裏是我的代碼:

在我onCreate(),我初始化ACTV並設置onClickListener()

brandACTV = (AutoCompleteTextView) findViewById(R.id.actvBrand); 
itemACTV = (AutoCompleteTextView) findViewById(R.id.actvItemName); 
partACTV = (AutoCompleteTextView) findViewById(R.id.actvPart); 
barcodeACTV = (AutoCompleteTextView) findViewById(R.id.actvBarcode); 

brandACTV.setOnClickListener(actvClicked); 
itemACTV.setOnClickListener(actvClicked); 
partACTV.setOnClickListener(actvClicked); 
barcodeACTV.setOnClickListener(actvClicked); 

onClickListener()定義,像這樣:

OnClickListener actvClicked = new OnClickListener(){ 

    @Override 
    public void onClick(View view){ 

     Log.d("Hi", "onClickActivated"); 

     switch (view.getId()) { 
      case R.id.actvBrand: 
       Log.d("Hi", "Brand pressed"); 
       break; 

      case R.id.actvItemName: 
       Log.d("Hi", "Item name pressed"); 
       break; 

      case R.id.actvPart: 
       Log.d("Hi", "Part pressed"); 
       break; 

      case R.id.actvBarcode: 
       Log.d("Hi", "Barcode pressed"); 
       break; 
     } 
    } 
}; 

然而,只有最初的點擊被正確檢測到。所有後續點擊只會在用戶點擊兩次相同的活動時註冊。

有關如何解決此問題的任何想法?謝謝。

回答

1

使用onFocusChangedListener代替。像這樣:

brandACTV.setOnFocusChangeListener(focusChanged); 
    itemACTV.setOnFocusChangeListener(focusChanged); 
    partACTV.setOnFocusChangeListener(focusChanged); 
    barcodeACTV.setOnFocusChangeListener(focusChanged); 

,然後聽衆的定義是這樣的:

OnFocusChangeListener focusChanged = new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 

     Log.d("Hi", "Id is " + v.getId() + ". Focus is " + hasFocus); 

     // TODO Auto-generated method stub 
     switch(v.getId()){ 
      case R.id.actvBrand: 
       Log.d("Hi", "Brand focus is + " + hasFocus); 
       break; 

      case R.id.actvItemName: 
       Log.d("Hi", "ItemName focus is + " + hasFocus); 
       break; 

      case R.id.actvPart: 
       Log.d("Hi", "Part focus is + " + hasFocus); 
       break; 

      case R.id.actvBarcode: 
       Log.d("Hi", "Barcode focus is + " + hasFocus); 
       break; 

     } 
    } 
}; 
0
brandACTV = (AutoCompleteTextView) findViewById(R.id.actvBrand); 
itemACTV = (AutoCompleteTextView) findViewById(R.id.actvItemName); 
partACTV = (AutoCompleteTextView) findViewById(R.id.actvPart); 
barcodeACTV = (AutoCompleteTextView) findViewById(R.id.actvBarcode); 

brandACTV.setOnClickListener(actvClicked); 
itemACTV.setOnClickListener(actvClicked); 
partACTV.setOnClickListener(actvClicked); 
barcodeACTV.setOnClickListener(actvClicked); 

onClickListener定義,像這樣:

OnClickListener actvClicked = new OnClickListener(){ 

    @Override 
    public void onClick(View view){ 

     Log.d("Hi", "onClickActivated"); 

     switch (view.getId()) { 
      case R.id.actvBrand: 
      actvBrand.requestFocus(); 
       Log.d("Hi", "Brand pressed"); 
       break; 

      case R.id.actvItemName: 
      actvItemName.requestFocus(); 
       Log.d("Hi", "Item name pressed"); 
       break; 

      case R.id.actvPart: 
     actvPart.requestFocus(); 
       Log.d("Hi", "Part pressed"); 
       break; 

      case R.id.actvBarcode: 
       actvBarcode.requestFocus(); 
       Log.d("Hi", "Barcode pressed"); 
       break; 
     } 
    } 
}; 
+0

試試這個...這可能幫助 –

+0

很抱歉這麼晚纔回復,你是怎麼在第一個代碼塊改變?另外,你的意思是'brandACTV.requestFocus();'而不是'actvBrand.requestFocus();'?如果我甚至不能進入'case'語句,'requestFocus()'會如何幫助?此解決方案不起作用。 – Razgriz

0

我認爲你必須從AutoCompleteTextView刪除焦點: 去你的XML並添加此屬性android:clickable="true"android:focusable="false"

+0

如果我將focusable設置爲false,我該如何輸入AutoCompleteTextView? – Razgriz