2016-11-04 86 views
0

为什么这会返回一些重复的项目?listview自定义适配器重复项目

而当我设convertView为null在启动它的工作原理,但我失去了平滑滚动

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHoilder viewhoilder = null; 
    if(convertView == null){ 
     LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = layoutInflater.inflate(R.layout.post_unit, null, true); 
     viewhoilder = new ViewHoilder(convertView); 
     convertView.setTag(viewhoilder); 
    }else{ 
     viewhoilder = (ViewHoilder) convertView.getTag(); 
    } 



    final Post_Unit post_unit = getItem(position); 
    if (post_unit.getPost_unit_type() == 10) { 



     Load_text(post_unit,viewhoilder); 

     Load_images(post_unit, viewhoilder); 

     Load_videos(post_unit, viewhoilder); 




    return convertView; 
} 

这里我ViewHolder

public class ViewHoilder{ 
    TextView post_username,post_date,post_content,video_title; 
    LinearLayout video_layout; 
    FrameLayout post_unit_btn_add_like; 
    ImageView video_thumbnail,img_post_unit_content_midea_img_imageview; 
    ScrollView post_unit_content_midea_imgs; 
    LinearLayout post_unit_content_midea_imgs_layout; 
    public ViewHoilder(View v) { 
     this.post_username = (TextView)v.findViewById(R.id.post_unit_username); 
     this.post_date = (TextView)v.findViewById(R.id.post_unit_date); 
     this.post_content = (TextView)v.findViewById(R.id.post_unit_content_text); 
     this.video_layout = (LinearLayout) v.findViewById(R.id.post_unit_content_midea_video); 
     this.video_title = (TextView) v.findViewById(R.id.post_unit_video_title); 
     this.video_thumbnail = (ImageView) v.findViewById(R.id.post_unit_video_logo); 
     this.img_post_unit_content_midea_img_imageview = (ImageView) v.findViewById(R.id.post_unit_content_midea_img_imageview); 
     this.post_unit_btn_add_like = (FrameLayout) v.findViewById(R.id.post_unit_content_midea_img); 
     this.post_unit_content_midea_imgs = (ScrollView) v.findViewById(R.id.post_unit_content_midea_imgs); 
     this.post_unit_content_midea_imgs_layout = (LinearLayout) v.findViewById(R.id.post_unit_content_midea_imgs_layout); 

    } 
} 

回答

0

替换代码 从

layoutInflater.inflate(R.layout.post_unit, null, true); 

layoutInflater.inflate(R.layout.post_unit, parent, false); 
+0

我试过这个,,不工作 –

+0

检查你的数组列表然后 – siddhesh

0

add onDetachedFromWindow() @Override方法在您的适配器中并添加holder.setIsRecyclable(false); 样品:

@Override onDetachedFromWindow(){
holder.setIsRecyclable(假);
}

:ListView中已被弃用所以使用recyclerview视图 https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

+0

在ArrayAdapter中没有这样的@method? –

+0

@SaefMyth请分享你的listView适配器代码 –

+0

参考这个文档:[链接](https://developer.android.com/reference/android/widget/ListView。html) –

0

按,可选视图,使其将所生成的分层结构的父(如果attachToRoot为真),否则简单地一个对象,为返回的层次结构的根提供一组LayoutParams值(如果attachToRoot为false)。

请更新您的行,

convertView = layoutInflater.inflate(R.layout.post_unit,null,true);

作为

convertView = layoutInflater.inflate(R.layout.post_unit,NULL,FALSE);

希望这将帮助你

0

请问这个问题是在加载图像和视频,并在工作原因的get视图中的逻辑问题,,,图像中加载它检查,如果图像是空的或不所以当它返回一个回收视图时,它会返回一个包含回收内容的视图,当它检查图像是否为空时,它会失败,因为它会获取一个回收视图,以便在没有图像的项目中插入图像。

的解决办法是重新有一个检查条件的所有图片和东西向设置,所以当校验失败,你没有得到回收利用的东西

0

试试这个

public View getView(int position, View convertView, ViewGroup parent) { 

if (null == convertView) { 
    LinearLayout view = (LinearLayout) LinearLayout.inflate(this.context, 
     R.layout.message, null); 
    Log.d("SeenDroid", String.format("Get view %d", position)); 
    TextView title = new TextView(view.getContext()); 
    title.setText(this.items.get(position).getTitle()); 
    view.addView(title); 
    return view; 
} else { 
    LinearLayout view = (LinearLayout) convertView; 
    TextView title = (TextView) view.getChildAt(0); 
    title.setText(this.items.get(position).getTitle()); 
    return convertView; 
} 

}

+0

我解决了这个问题检查我的答案上面,,谢谢任何方式 –

相关问题