2016-01-21 65 views
2

我做了一个应用程序,我正在ListView中显示图像。我列表项的高度很小,并且在列表的第9项中插入几个后显示我插入的第一个项。为什么会发生?ANDROID - ListView项目无法正常显示

我认为问题不在数据库中,因为当我点击该项目并打开详细信息屏幕时,它是正确的图像。

我想不出是什么问题!有任何想法吗?

我的适配器是:

public class CustomAdapter extends BaseAdapter { 

    private List<Clothes> items; 
    private Context context; 
    private LayoutInflater inflater; 

    public CustomAdapter(Context _context, List<Clothes> _items){ 
     inflater = LayoutInflater.from(_context); 
     this.items = _items; 
     this.context = _context; 

    } 



    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Clothes clothes = items.get(position); 

     View view = convertView; 

     if (view == null) { 

      view = inflater.inflate(R.layout.cloth_item, null); 


      TextView category = (TextView) view.findViewById(R.id.tv_category); 
      TextView size = (TextView) view.findViewById(R.id.tv_size); 
      TextView style = (TextView) view.findViewById(R.id.tv_style); 
      TextView brand = (TextView) view.findViewById(R.id.tv_brand); 
      TextView state = (TextView) view.findViewById(R.id.tv_state); 
      ImageView photo = (ImageView) view.findViewById(R.id.list_image); 

      category.setText(clothes.getCategory()); 
      size.setText(clothes.getSize()); 
      style.setText(clothes.getStyle()); 
      brand.setText(clothes.getBrand()); 
      state.setText(clothes.getState()); 
      photo.setImageBitmap(BitmapFactory.decodeFile(clothes.getPhotograph())); 
     } 
     return view; 

    }  
} 

而且我的名单是:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" 
    android:background="#ffffff"> 

    <ListView 
     android:id="@+id/categorized_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fastScrollEnabled="true" 
     />  

</RelativeLayout> 
+0

使用视图持有者 – justDroid

+0

查看绑定视图列表这个问题..它会有所帮助http://stackoverflow.com/问题/ 6470089/why-did-the-listview-repeated-every-6th-item –

+0

谢谢大家!是的,持有人创造了奇迹! – user5805577

回答

0

布局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="YourClass" 
    tools:showIn="@layout/activity_notification"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/listViewNotification" /> 
</RelativeLayout> 

创建一个名为list_item.xml

文件
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ripple="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:id="@+id/notificationMain" 
    android:gravity="center"> 

    <com.andexert.library.RippleView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/rippleNotification" 
     ripple:rv_color="@color/rippelColor" 
     ripple:rv_rippleDuration="200" 
     ripple:rv_type="rectangle"> 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:paddingTop="10dp" 
      android:paddingBottom="10dp"> 

      <LinearLayout 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 
       <com.bonafyd.foruser.forImageLoading.ImageViewRounded 
        android:layout_width="50dp" 
        android:layout_height="50dp" 
        android:layout_marginRight="10dp" 
        android:id="@+id/notiAvatar"/> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1" 
        android:gravity="center" 
        android:layout_gravity="center" 
        android:orientation="vertical"> 
        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Notification" 
         android:textColor="#343434" 
         android:id="@+id/tvNotification" /> 
        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Date" 
         android:textSize="12sp" 
         android:id="@+id/tvDate" /> 
       </LinearLayout> 



      </LinearLayout> 

     </LinearLayout> 
    </com.andexert.library.RippleView> 
</RelativeLayout> 

Aadapter

class NotificationAdapter extends BaseAdapter{ 
    ArrayList<NotificationValues> notificationArrayList; 
    public NotificationAdapter(ArrayList<NotificationValues> list) 
    { 
     notificationArrayList = list; 
    } 
    @Override 
    public int getCount() { 
     return notificationArrayList.size(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return notificationArrayList.get(i); 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 
     LayoutInflater inflaterPostPanel = getLayoutInflater(); 
     View row = inflaterPostPanel.inflate(R.layout.notification_list_item, viewGroup, false); 
     TextView tvNotification = (TextView) row.findViewById(R.id.tvNotification); 
     TextView tvDate = (TextView) row.findViewById(R.id.tvDate); 
     RippleView rippleNotification = (RippleView) row.findViewById(R.id.rippleNotification); 
     ImageViewRounded notiAvatar = (ImageViewRounded) row.findViewById(R.id.notiAvatar); 

     final NotificationValues notificationValues = notificationArrayList.get(i); 
     tvNotification.setText(notificationValues.notifText); 
     tvDate.setText(dbManager.getTimeStampNew(notificationValues.notifDate)); 

     Picasso.with(context).load(notificationValues.avatar).resize(90, 90).centerCrop().into(notiAvatar); 

     final SharedPreferences pref = context.getSharedPreferences("User", 0); 
     rippleNotification.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() { 
      @Override 
      public void onComplete(RippleView rippleView) { 
       } 
     }); 


     return row; 
    } 
} 
0

使用此 :

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Clothes clothes = items.get(position); 
    View view = convertView; 
    if (view == null) { 
     view = inflater.inflate(R.layout.cloth_item, null); 
    } 
    TextView category = (TextView) view.findViewById(R.id.tv_category); 
    TextView size = (TextView) view.findViewById(R.id.tv_size); 
    TextView style = (TextView) view.findViewById(R.id.tv_style); 
    TextView brand = (TextView) view.findViewById(R.id.tv_brand); 
    TextView state = (TextView) view.findViewById(R.id.tv_state); 
    ImageView photo = (ImageView) view.findViewById(R.id.list_image); 
    category.setText(clothes.getCategory()); 
    size.setText(clothes.getSize()); 
    style.setText(clothes.getStyle()); 
    brand.setText(clothes.getBrand()); 
    state.setText(clothes.getState()); 
    photo.setImageBitmap(BitmapFactory.decodeFile(clothes.getPhotograph())); 
    return view; 
}