2016-07-29 3 views
0

, когда я использую этотRecyclerView с различными раскладками

@Override 
    public int getItemViewType(int position) { 

    return position; 
    } 

мою RecyclerView работу без проблем Теперь я хочу использовать мульти раскладку на нем я использовать этот

@Override 
public int getItemViewType(int position) { 
    int type = -1; 
    if(mMessages.get(position).getDir().equals("left"))   type = 1; 
    else if(mMessages.get(position).getDir().equals("right")) type = 0; 
    else if(mMessages.get(position).getDir().equals("typing")) type = 2; 
    return type; 
    //return position; 

} 

проблему, когда я использовал это и прокрутите вверх и назад или просто прокрутите его элемент порядка в RecyclerView, например, сделайте первый элемент на нем последним или посередине или где-нибудь там, где я не в правильном положении

только если я обратно к первому коду getItemViewType свою работу без проблемы, но я не могу использовать mulţi компоновки

мой полный код

public class MessageAdapter1 extends RecyclerView.Adapter<MessageAdapter1.ViewHolder> { 

private List<MessageList> mMessages; 
private int[] mUsernameColors; 
private Context context; 


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

} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    int layout = -1; 



    switch (viewType) { 
    case 0: 
     layout = R.layout.right_message; 
     break; 
    case 1: 
     layout = R.layout.left_message; 
     break; 
    case 2: 
     layout = R.layout.message_left; 
     break; 
    } 



    View v = LayoutInflater.from(parent.getContext()).inflate(layout , parent, false); 

    return new ViewHolder(v); 
} 

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int position) { 
    MessageList message = mMessages.get(position); 


    //viewHolder.setMessage(message.getMessage()); 
    //viewHolder.setUsername(message.getUsername()); 
    viewHolder.setGroupMessage(message); 
} 

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



@Override 
public int getItemViewType(int position) { 
    int type = -1; 
    if(mMessages.get(position).getDir().equals("left"))   type = 1; 
    else if(mMessages.get(position).getDir().equals("right")) type = 0; 
    else if(mMessages.get(position).getDir().equals("typing")) type = 2; 
    return type; 
    //return position; 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 

    private LinearLayout groupMessage; 
    //private ImageView typing; 
    public ViewHolder(View itemView) { 
     super(itemView); 

     groupMessage = (LinearLayout)itemView.findViewById(R.id.messages); 

    } 

    public void setGroupMessage(MessageList m) { 


     if (null == groupMessage) return; 

     int i = 0; 

     if(m.getMessageStatus() == false){ 
      m.setMessageStatus(true); 
      for (String message : m.getMessageList()) { 

       //TextView text = new TextView(activity); 
       TextView text = new MyTextView(context); 
       LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
       p.setMargins(0, 0, 0, 2); 

       if (m.getDir().equals("left")) { 

        text.setTextColor(Color.BLACK); 
        p.gravity = Gravity.LEFT; 
        if(m.getMessageList().size() == 1){ 
         text.setBackgroundResource(R.drawable.message_left_default); 
        } 
        else if (i == 0) { 
         text.setBackgroundResource(R.drawable.message_left_first); 
        } else if (i + 1 == m.getMessageList().size()) { 
         text.setBackgroundResource(R.drawable.message_left_last); 
        } else { 
         text.setBackgroundResource(R.drawable.message_left); 
        } 


       } else{ 

        p.gravity = Gravity.RIGHT; 
        text.setTextColor(Color.WHITE); 

        if(m.getMessageList().size() == 1){ 
         text.setBackgroundResource(R.drawable.message_right_default); 
        } 
        else if (i == 0) { 
         text.setBackgroundResource(R.drawable.message_right_first); 
        } else if (i + 1 == m.getMessageList().size()) { 
         text.setBackgroundResource(R.drawable.message_right_last); 
        } else { 
         text.setBackgroundResource(R.drawable.message_right); 
        } 

       } 


       text.setLayoutParams(p); 
       text.setText(message); 
       text.setPadding(8, 8, 8, 8); 

       text.setTextSize(18f); 



       //text.setTextAppearance(context, android.R.style.TextAppearance_Large); 
       groupMessage.addView(text); 
       i++; 
      } 

     } 




    } 



    } 
} 

ответ

1

я решить ее удалить

int type = -1; 
if(mMessages.get(position).getDir().equals("left"))   type = 1; 
else if(mMessages.get(position).getDir().equals("right")) type = 0; 
else if(mMessages.get(position).getDir().equals("typing")) type = 2; 
return type; 

от

getItemViewType 

и вернуть position

и поставить первый код

int type = -1; 
if(mMessages.get(position).getDir().equals("left"))   type = 1; 
else if(mMessages.get(position).getDir().equals("right")) type = 0; 
else if(mMessages.get(position).getDir().equals("typing")) type = 2; 
return type; 

в onCreateViewHolder и использовать viewType как текущее положение