2015-03-09 1 views
0

Теперь у меня есть вид списка с пользовательским адаптером, который показывает разные типы макетов. Элементы просмотра списка повторяются случайным образом, и я не могу понять проблему. Итак, может ли кто-нибудь помочь? Вот мой код.ListView items repetition

public class NewsFeedAdapter extends BaseAdapter { 

private final int IMAGE_COMPARISON = 0; 
private final int POLL = 1; 
private final int EMO = 2; 
private final int TYPE_MAX_COUNT = EMO + 1; 
private ArrayList<Post> posts = new ArrayList<Post>(); 
private ArrayList<Post> originalPosts = new ArrayList<Post>(); 
private MaterialDialog alert; 
private Context context; 
private ApiClient apiClient; 
private SharedPreferences sharedPreferences; 
private int id; 
private Bitmap bitmap; 
private ArrayList<View> views ; 
private Intent sharingIntent; 
private String link; 
private String type; 

public NewsFeedAdapter(Context context, ArrayList<Post> questionItems) { 
    this.context = context; 
    this.posts = questionItems; 
    this.originalPosts = new ArrayList<Post>(posts); 
    this.apiClient = ApiClient.getInstance(context); 
    sharedPreferences = context.getSharedPreferences(context.getResources().getStringArray(R.array.preferences)[4], 0); 
    views = new ArrayList<>(); 
} 

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

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

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

@Override 
public int getViewTypeCount() { 
    return TYPE_MAX_COUNT; 
} 

@Override 
public int getItemViewType(int position) { 

    String type = ((Post)getItem(position)).getQ().getType(); 
    if(type.equalsIgnoreCase("radio")){ 
     return POLL; 
    }else if(type.equalsIgnoreCase("image")){ 
     return IMAGE_COMPARISON; 
    }else{ 
     return EMO; 
    } 
} 

public int getItemViewType(Post post) { 

    String type = (post).getQ().getType(); 
    if(type.equalsIgnoreCase("radio")){ 
     return POLL; 
    }else if(type.equalsIgnoreCase("image")){ 
     return IMAGE_COMPARISON; 
    }else{ 
     return EMO; 
    } 
} 

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

     int type = getItemViewType(position); 

     switch (type) { 
      case IMAGE_COMPARISON: 

       ImageListRowView imageListRowView; 

      // if (convertView == null) { 
        imageListRowView = new ImageListRowView(context, new MenuListener() { 
         @Override 
         public void onReceive(MenuItemAction menuItemAction,int position) { 
          preformMenuAction(menuItemAction, position); 
         } 
        }); 
        imageListRowView.setData(posts.get(position)); 
        imageListRowView.setTag(R.string.view_tag,position); 
       views.add(imageListRowView); 
       return imageListRowView; 
      // } 
      // else 
      // imageListRowView = (ImageListRowView) convertView; 
      //return imageListRowView; 

       { 
       case EMO: 

       EmoListRowView emoListRowView; 

      // if (convertView == null) { 
        emoListRowView = new EmoListRowView(context, new MenuListener() { 
         @Override 
         public void onReceive(MenuItemAction menuItemAction,int position) { 
          preformMenuAction(menuItemAction, position); 
         } 
        }); 
        emoListRowView.setData(posts.get(position)); 
        emoListRowView.setTag(R.string.view_tag,position); 
        views.add(emoListRowView); 
        return emoListRowView; 
      // } 
      // else 
      //  emoListRowView = (EmoListRowView) convertView; 
      // return emoListRowView; 

      case POLL: 

       PollListRowView pollListRowView; 

       // if (convertView == null) { 
        pollListRowView = new PollListRowView(context, new MenuListener() { 
         @Override 
         public void onReceive(MenuItemAction menuItemAction,int position) { 
          preformMenuAction(menuItemAction, position); 
         } 
        }); 
        pollListRowView.setData(posts.get(position)); 
        pollListRowView.setTag(R.string.view_tag,position); 
        views.add(pollListRowView); 
        return pollListRowView; 
       } 
     //  else 
     //   pollListRowView = (PollListRowView) convertView; 
     //  return pollListRowView; 
     } 
    return convertView; 
} 

ответ

0

getView() потребности в всегда настроить строки. Единственное отклонение, основанное на том, convertView - null, нужно ли вам также надувать строки.

В каждом из ваших case блоков, если convertView не null, вы просто вернуть convertView без изменений.

+0

Я сделал изменения в коде, пожалуйста, посмотрите на него после редактирования –

+0

@MuhammadKorany: Теперь вы раздувание макетов, когда не нужен. Внутри блоков 'case' вы делаете две вещи: раздуваете макет и помещаете вещи в виджеты макета. Если 'convertView' не' null', вы можете пропустить раздувание макета, чтобы сохранить время процессора и использование кучи. – CommonsWare

+0

Можете ли вы предоставить код, который должен заменить мой код? –