2012-04-11 95 views
0

我有一個EditText,我使用作爲我的ListView。我試圖訪問焦點/失去焦點事件,但由於某種原因,它每次焦點都會發射多次。這裏發生了什麼?Android - ListView EditText焦點問題

// in onCreate 

// ... 

// the footer 
View v = getLayoutInflater().inflate(R.layout.comment_edittext, null); 

EditText commentEditText = (EditText)v.findViewById(R.id.comment_edittext); 
commentEditText.setOnFocusChangeListener(new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) 
    { 
     U.log("View: " + v.getClass().getName().toString()); 

     if(hasFocus) 
     { 
      U.log("Clicked"); 
     } 
     else 
     { 
      U.log("Un Clicked"); 
     } 
    } 
}); 

// add the footer 
commentListView.addFooterView(v); 

// ... 

輸出,單點觸摸,這帶來了鍵盤是:

04-11 10:22:17.449: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.459: E/004 - X(4576): Clicked 
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.569: E/004 - X(4576): Un Clicked 
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.569: E/004 - X(4576): Clicked 
04-11 10:22:17.689: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.689: E/004 - X(4576): Un Clicked 
04-11 10:22:17.709: E/004 - X(4576): View: android.widget.EditText 
04-11 10:22:17.709: E/004 - X(4576): Clicked 

我可以種理解它調用帶有hasFocus設置多個事件true,但爲什麼然後在那裏也false s,觸發Un Clicked登錄?

編輯:此外,每當我滾動ListView上下移動EditText進出來看,它調用這些事件也是如此。我是否使用了錯誤的偵聽器類型?

+0

我的猜測是你的onCreate方法被多次調用。 – njzk2 2012-04-11 17:06:51

回答

1

從個人經驗來看,ListView中的EditTexts是一個噩夢。由於視圖被回收和渲染的方式,焦點行爲奇怪。我建議以其他方式解決問題。實際上,如果它是一個評論文本框,如果它始終可見,它會更好嗎?

樣品佈局:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ListView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"/> 
    <EditText 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
    </LinearLayout> 
+0

我最初的嘗試是將它放在我的佈局的XML文件中的ListView之後。但它不會呈現,所以我認爲這與ListView的向下擴展有關。如果有辦法做到這一點,我會接受。 – Josh 2012-04-11 15:43:15

+0

添加了我用於完全相同目的的佈局。 – dmon 2012-04-11 15:45:26

1

使用GridView代替並給予1.爲numColumns如果你不喜歡如何在Java類中讀取,將它們存儲作爲AbsListView(僅保存它們作爲在你的XML中的一個GridView)。

ListView與EditTexts錯誤,GridViews缺乏這些問題。

+0

嘗試此操作沒有看到任何區別 – Joakim 2016-10-17 08:38:37

0

使用Grideview和numColumns爲1是解決問題的最佳方法。我已經嘗試過並解決了我的問題。