2013-02-07 73 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" 

和它的工作。