2016-11-04 3 views
0

Почему это возвращает некоторые повторяющиеся элементы?listview custom adapter duplicate items

И когда я поставил convertView к нулю при запуске она работает, но я теряю плавный скроллинг

@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

добавить onDetachedFromWindow() метод @Override в адаптере и добавить holder.setIsRecyclable (ложь); образца:

@Override onDetachedFromWindow() {
holder.setIsRecyclable (ложь);
}

Примечание: ListView является устаревшим, так что используйте вид recyclerview https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

+0

нет такого @method в ArrayAdapter ?? –

+0

@SaefMyth PLS поделится вашим кодом кода спискаView –

+0

обратитесь к этому документу: [link] (https://developer.android.com/reference/android/widget/ListView.html) –

0

как за, Опциональное быть родителем сгенерированной иерархии (если attachToRoot истинно), либо просто объект, который содержит набор значений LayoutParams для корня возвращенной иерархии (если attachToRoot ложно.)

Пожалуйста, обновите вашу линию,

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

, как

convertView = layoutInflater.inflate (R.layout.post_unit, нулевой, ложно);

Надеется, что это поможет вам

0

Будут ли проблема логической проблема в загрузке изображения и видео, и с точкой зрения может понять, почему работы ,,, в изображении загрузить его проверить, если изображение пустое или нет поэтому, когда он возвращает представление для повторного использования, он возвращает вид с переработанным материалом и когда он проверяет изображение, если он пуст, он терпит неудачу, так как он получает переработанное представление, поэтому он вставляет изображение в элемент без изображений.

решение сбросить все изображения и вещи, которые имеют проверки состояния, чтобы установить его так, если проверка не в состоянии вы не получите переработанный материал

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

Я решил проблему проверить свой ответ выше, спасибо любым способом –

Смежные вопросы