2013-02-07 99 views
2

我在我的應用程序中使用CursorAdapter的自定義實現實施了ListView。我的問題是,每當我快速滾動到列表底部(啓動應用程序後),我有時最終會將所有ListView項目相互重疊。如果我向後滾動或觸摸其中一個項目,它們會被正確排列。Android ListView項目在滾動時重疊

這裏是如何照顧我趕緊向下滾動: http://i.stack.imgur.com/cTcfD.png

這裏是如何看的時候,我選擇 - 荷蘭國際集團的項目之一: http://i.stack.imgur.com/ZTRSt.png

下面是XML我ListView

<ListView 
     android:id="@+id/all_reminders_list" 
     android:paddingLeft="4dp" 
     android:paddingRight="4dp" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:layout_alignParentLeft="true" 
     android:clickable="true" 
     android:dividerHeight="1.0sp" 
     android:animateLayoutChanges="true"> 

這裏是我的自定義CursorAda的newView(..)方法PTER:

public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View view = inflater.inflate(R.layout.view_list_item, parent, false); 
    return view; 
} 

這是bindView(..)方法:

public void bindView(View view, Context context, Cursor cursor) { 

     TextView whatTextView = (TextView) view.findViewById(R.id.item_what_text); 
     whatTextView.setText(cursor.getString(1)); 
     TextView whenTextView = (TextView) view.findViewById(R.id.item_when_text); 


     if(cursor.getInt(9) != 0) // DONE_FLAG = 1 (completed) 
     { 
      //Arrow visibility 
      ImageView arrow = (ImageView)view.findViewById(R.id.list_item_arrow); 
      arrow.setVisibility(View.INVISIBLE); 

      //Text color 
      whatTextView.setTextColor(Color.LTGRAY); 
      whenTextView.setTextColor(Color.LTGRAY); 

      //WHEN text 
      whenTextView.setText(TimeCalculationHelper.getCompletedTimeString(cursor.getLong(2))); 
     } 
     else // DONE_FLAG = 0 
     { 
      //Arrow visibility 
      ImageView arrow = (ImageView)view.findViewById(R.id.list_item_arrow); 
      arrow.setVisibility(View.VISIBLE); 

      //Text color 
      whatTextView.setTextColor(Color.BLACK); 
      whenTextView.setTextColor(Color.BLACK); 

      //WHEN text 
      whenTextView.setText(TimeCalculationHelper.getTimeRemainingString(cursor.getLong(2))); 


     } 
} 

我也注意到,我已經能夠複製它,只有當我的設備(銀河S2)處於省電模式。有什麼我應該在這裏有所不同嗎?提前致謝!

編輯:包括列表項的佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:paddingLeft="2dp"> 

<TextView android:id="@+id/item_what_text" 
      android:lines="1" 
      android:maxLines="2" 
      android:textSize="22dp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:paddingTop="3dp"/> 

<TextView android:id="@+id/item_when_text" 
      android:lines="1" 
      android:maxLines="1" 
      android:textSize="14dp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="13 minutes" 
      android:paddingBottom="2dp" 
      android:layout_below="@+id/item_what_text"/> 

<ImageView 
    android:id="@+id/list_item_arrow" 
    android:src="@drawable/next" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true"/> 


</RelativeLayout> 
+0

你可以發佈你的列表項目的佈局? –

+0

@MichałZ。我已經包括它。 –

回答

0

1.在我看來 ,高度WRAP_CONTENT 因爲列表視圖是恢復排 2. 其他意見是寫代碼的Android:cacheColorHint =在ListView中「#00000000」

+1

對不起,這根本沒有幫助。 –

5

我也遇到了同樣的問題,ListView項目在我的ListView中滾動時互相重疊。

我的修復程序: 我剛剛爲包含ListView的父佈局指定了背景。以前它是透明的。

+0

你可以在這裏寫你的xml嗎? –

3

爲了解決這個問題,我又多了一個解決方案:

我用這個佈局所面臨的問題:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"  
    >  
     <ListView 
      android:id="@+id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:scrollbars="none"    
      android:paddingTop="4dip" 
      android:dividerHeight="0dp" 
      android:divider="@null" 
      android:cacheColorHint="#00000000" 
      android:listSelector="@color/transprent_editbox" 
      android:focusableInTouchMode="false" />   
</RelativeLayout> 

爲了解決這個問題,我只是做了以上佈局一些修改,這些是: 1)將頂部佈局從相對更改爲線性佈局。 2)把我的ListView在其他相對佈局.. 我不喜歡這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"  
    android:orientation="vertical" > 
     <RelativeLayout   
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"  
      android:orientation="vertical" > 
     <ListView 
      android:id="@+id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:scrollbars="none"    
      android:paddingTop="4dip" 
      android:dividerHeight="0dp" 
      android:divider="@null" 
      android:cacheColorHint="#00000000" 
      android:listSelector="@color/transprent_editbox" 
      android:focusableInTouchMode="false" /> 
     </RelativeLayout> 
</LinearLayout> 

使用此之後,我的問題就解決了。

3

我有同樣的問題,並發現它是由在listview上設置animateLayoutChanges屬性爲true引起的。

不幸的是,我失去了listview的動畫,刪除它,但至少它在快速滾動時正確繪製。

給父母佈局一個背景也似乎解決了問題,正如Pavan所述。如果我發現背景變化的問題,將嘗試並更改我的答案。

0

我也面臨同樣的問題,並發現animateLayoutChanges屬性導致的問題。

,所以我改變

android:animateLayoutChanges="true" 

android:animateLayoutChanges="false" 

和它的工作。