2010-08-12 53 views
32

我有一個ListView我已經定義了每個項目在一個單獨的XML文件中的佈局。在這個文件中我包含了一個RatingBar和一個EditTextBuggy ListView讓我很難過

我編程式創建了7-8項這ListView。當我滾動瀏覽它們時,它看起來很麻煩。下面是一些例子:

  1. 如果我設置聚焦到EditText第一排,然後向下滾動ListView,隨機EditTexts從其他行會的焦點。好像是在聚焦的人消失後的下一個EditText受到關注。也許這是故意的,但作爲一個用戶,這似乎很奇怪。

  2. 如果我將焦點設置爲EditText,接收虛擬鍵盤,輸入內容,然後單擊虛擬鍵盤上的「完成」按鈕,EditText將在虛擬鍵盤消失後立即清空。

  3. 有時,當我點擊一個EditText,接收一個虛擬鍵盤並開始輸入字母時,一旦我輸入字母,這些字母就會消失。

  4. 當我點擊一個EditText,虛擬鍵盤顯示自己,但EditText失去了重點,我不得不再次點擊EditText

  5. 儘管我已將RatingBar設置爲focusable="false",但如果我移動滾輪,它仍會抓住焦點。

我的一個問題是所有可見的列表項獲得重繪當我輸入的虛擬鍵盤的字符(和自EditText的文本設置爲一些數據,裏面是空的,它被清除。我不明白爲什麼Android會在每次鍵入字符時決定重新繪製列表

下面是我用來繪製它們的XML:它們是白色的氣泡,灰色的邊框和一些文字,一個RatingBar和一個EditText裏面:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="10dip" 
    android:paddingBottom="10dip" 
    android:paddingLeft="15dip" 
    android:paddingRight="15dip" 
    > 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="2dip" 
     android:background="@drawable/shape_outer"> 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:padding="2dip" 
      android:background="@drawable/shape_inner"> 
        <TextView 
          android:id="@+id/rating_category" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:textColor="@color/dark_gray" 
          android:textStyle="bold" 
          android:layout_marginBottom="10dip" /> 
         <RatingBar 
          android:id="@+id/rating_rating" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:numStars="5" 
          android:rating="0" 
          android:stepSize="1" 
          android:focusable="false" 
          android:clickable="false" 
          /> 
         <EditText 
          android:id="@+id/rating_text" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:layout_column="1" 
          android:padding="6dip" 
          android:textColor="#000000" 
          android:gravity="left|top" 
          android:lines="3" 
          android:hint="Comment" 
          android:imeOptions="actionDone" /> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 
+7

我剛剛投了票,因爲我愛你的問題名稱。你的虛擬設備有多強大? – Nix 2010-08-12 14:35:33

+0

我同意尼克斯。 – Mike 2010-08-12 14:36:47

+0

哈哈,謝謝。我在創建虛擬設備時所做的唯一一件事(我只是在這裏輸入了「VD」,並認爲我將它拼出來)是鍵入一個名稱並選擇目標(2.1)。其他一切都是默認的。 – Andrew 2010-08-12 14:38:24

回答

19

聽起來好像ListViews無法很好地處理EditTexts。我已經做了一些研究,共識似乎是「不這樣做」。所以我採取的是創建一個簡單的佈局文件,它是一個帶有LinearLayout的ScrollView。在我的onCreate方法中,我膨脹了我用於列表項目的視圖並將其添加到LinearLayout。我還將視圖添加到ArrayList中,以便稍後將數據保存在每個視圖中。

這聽起來合理嗎?

+0

這篇文章很棒,我花了很多時間試圖讓te在ListView中工作的xt和下拉式輸入。讀完這個之後,我在ScrollView中使用LinearLayout重新實現了它,並且它在第一次完美運行。 – 2011-10-10 21:18:56

+0

這發生在EditText不在ListView中時(我的EditText嵌套在一些LinearLayout和RelativeLayout中)。 – samosaris 2013-01-15 22:27:00

+0

@SamusArin有一個已知的解決方案來解決這個問題,當你有EditTexts嵌套在幾個LinearLayouts內? – stephen 2013-09-07 10:09:37

4

我遇到了同樣的問題。我裏面LisView的EditText上正在失去焦點鍵盤出現時,等getView從ListView項我把

final EditText editInput = (EditText)convertView.findViewById(R.id.edit_input); 
editInput.requestFocusFromTouch(); 

而這個工作對我來說。

+0

看起來像某種詭計,但適用於我 – VsMaX 2013-12-31 01:35:04

+1

編輯:它不工作。它似乎與三星鍵盤正常工作,但問題依然存在於SwiftKey鍵盤上。 – VsMaX 2013-12-31 01:45:59

5

那麼,在清單添加到您的活動......

android:windowSoftInputMode="adjustPan" 

例...

<activity android:name=".mapview.AddParkingLotActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan"/> 
+0

向清單中的活動添加android:windowSoftInputMode =「adjustPan」解決了此問題。另一個值得讚賞的技巧是添加填充的方式,以便edittext字段不會碰撞軟鍵盤面板。 – Rob 2014-08-07 07:01:21

+0

這對我也有幫助。 – Giorgi 2014-10-21 18:43:16

+0

這適用於我,但可能是一個好主意解釋我們是什麼; ) – Ging3r 2015-09-03 15:53:25

0

我有一些問題我解決了剛評論這條線

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
3

解決了類似的問題,我(的EditText上的ListView +搞笑鍵盤行爲中的行)這兩個步驟。

  1. 添加機器人:windowSoftInputMode = 「adjustPan」屬性爲 AndroidManifest.xml文件上的活動,其中的ListView是 呈現。
  2. 加入android:descendantFocusability =「afterDescendants」屬性到ListView本身。

這是實際的例子:

AndroidManifest.xml中

<activity 
     android:name=".SubscriptionListActivity" 
     android:windowSoftInputMode="adjustPan" 
     android:label="@string/title_activity_subscriptions" > 
    </activity> 

layout.xml文件

<ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:descendantFocusability="afterDescendants" 
     android:id="@+id/subscriptionList" /> 

我測試了三星Galaxy S3和正常工作與三星以及SwiftKey鍵盤。

+0

當listview包含很多行時,它不工作 – Lola 2017-01-18 06:02:24