RecyclerView具有不同的布局

时间:2016-07-29 14:06:51

标签: android android-layout android-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其工作的第一个代码   问题,但我不能使用多种布局

我的完整代码

 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 个答案:

答案 0 :(得分: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作为当前位置