2017-07-26 80 views
0

我已經listviewBaseAdapter這是我的適配器代碼Android的列表視圖重複數據,同時滾動

public class MessageAdapter1 extends BaseAdapter { 

Context context; 
private int auth; 
private List<MessageList> mMessages; 
private LayoutInflater mInflater; 




public MessageAdapter1(Context context, List<MessageList> messages) { 
    this.mMessages = messages; 
    this.context = context; 

    this.session = new SessionManager(context); 
    mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    auth  = session.getUserId(); 

} 



@Override 
public int getItemViewType(int position) { 
    int type = -1; 
    String m = mMessages.get(position).getType(); 
    int user_idx = mMessages.get(position).getUser_id(); 


    if(auth != user_idx && m.equals("message"))   type = 1; 
    else if(auth == user_idx && m.equals("message")) type = 0; 
    else if(auth != user_idx && m.equals("image"))  type = 3; 
    else if(auth == user_idx && m.equals("image"))  type = 4; 
    //other else if and types ..... 
return type; 
} 

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

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

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

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    int type = getItemViewType(position); 

    if (convertView == null) { 
     holder = new ViewHolder(); 
     switch (type) { 



       case MessageList.TYPE_MESSAGE_RIGHT: 
        convertView = mInflater.inflate(R.layout.right_message, null); 
        holder.groupMessage = (LinearLayout)convertView.findViewById(R.id.messages); 

        break; 
       case MessageList.TYPE_MESSAGE_LEFT: 
        convertView = mInflater.inflate(R.layout.left_message, null); 
        holder.groupMessage = (LinearLayout)convertView.findViewById(R.id.messages); 
        break; 
       case MessageList.TYPE_ACTION: 
        convertView = mInflater.inflate(R.layout.typing, null); 
        holder.Indicator = (AVLoadingIndicatorView)convertView.findViewById(R.id.indicator); 

        break; 
        //other case break for other types .. 




     } 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder)convertView.getTag(); 
    } 

      setMessage(holder,position); 


    return convertView; 
} 

private void setMessage(ViewHolder holder, int position){ 
    MessageList m = mMessages.get(position); 

    //holder.groupMessage.add ... data 





} 


public static class ViewHolder { 
    private LinearLayout groupMessage; 
    private AVLoadingIndicatorView Indicator; 
    //more here other 
} 
} 

我在谷歌和計算器搜索所有解決方案談Override

`getViewTypeCount` and `getItemViewType` and other solution not helped me 

我看到我的代碼,它的正確的,但爲什麼它的重複或重排項目時滾動的 ListView

回答

1

因爲您的項目視圖會根據列表中的項目類型而發生更改,您無法緩存視圖持有者。

嘗試刪除您if (convertView == null) {和伴隨else {聲明。

+0

我現在試試:)等待我的最終結果 – medo

+0

哦,我的上帝像一個魅力工作謝謝你 – medo