代码大多转载第一行代码:
public class MainActivity extends ActionBarActivity { private List<Msg> mMsgList = new ArrayList<>(); private EditText inputText; private Button send; private RecyclerView mRecyclerView; private MSgAdapter mMSgAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initMsgs(); inputText = (EditText) findViewById(R.id.input_text); send = (Button) findViewById(R.id.send); mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview); mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager (2,StaggeredGridLayoutManager.VERTICAL));// 纵向 2行 mMSgAdapter = new MSgAdapter(mMsgList); mRecyclerView.setAdapter(mMSgAdapter); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String content = inputText.getText() .toString(); if (!"".equals(content)){ Msg msg = new Msg(content,Msg.TYPE_SENT); mMsgList.add(msg); mMSgAdapter.notifyItemInserted(mMsgList.size()-1);// 刷新显示 mRecyclerView.scrollToPosition(mMsgList.size()-1);// 定位到最后一行 inputText.setText("");// 清空 } } }); } private void initMsgs() { Msg msg1 = new Msg("美女,你好",Msg.TYPE_RECEIVED); mMsgList.add(msg1); Msg msg2 = new Msg("嗯?",Msg.TYPE_SENT); mMsgList.add(msg2); Msg msg3 = new Msg("美女,你长的好美",Msg.TYPE_RECEIVED); mMsgList.add(msg3); Msg msg4 = new Msg("我好喜欢",Msg.TYPE_RECEIVED); mMsgList.add(msg4); Msg msg5 = new Msg("呵呵",Msg.TYPE_SENT); mMsgList.add(msg5); Msg msg6 = new Msg("美女,什么时候我请你吃饭",Msg.TYPE_RECEIVED); mMsgList.add(msg6); Msg msg7 = new Msg("谢谢,不用",Msg.TYPE_SENT); mMsgList.add(msg7); for (int i = 0; i < 20000; i++) { mMsgList.add(msg6); } } }
public class MSgAdapter extends RecyclerView.Adapter<MSgAdapter.ViewHolder> { private List<Msg> mMsgList; // 第一步 Adapter自定义的Adapter static class ViewHolder extends RecyclerView.ViewHolder{ LinearLayout leftLayout; LinearLayout rightLayout; TextView leftMsg; TextView rightMsg; public ViewHolder(View view) { super(view); leftLayout = (LinearLayout) view.findViewById(R.id.left_layout); rightLayout = (LinearLayout) view.findViewById(R.id.right_layout); leftMsg = (TextView) view.findViewById(R.id.left_msg); rightMsg = (TextView) view.findViewById(R.id.right_msg); } } // 第二步 构造函数,将数据与Adapter进行关联 public MSgAdapter(List<Msg> msgList) { mMsgList = msgList; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_item,parent,false); return new ViewHolder(view) ; } @Override public void onBindViewHolder(ViewHolder holder, int position) { Msg msg = mMsgList.get(position); if (msg.getType() == Msg.TYPE_RECEIVED){ // 左边收到的消息 holder.leftLayout.setVisibility(View.VISIBLE); holder.rightMsg.setVisibility(View.GONE); holder.leftMsg.setText(msg.getContent()); }else { // 右边 holder.leftLayout.setVisibility(View.GONE); holder.rightMsg.setVisibility(View.VISIBLE); holder.rightMsg.setText(msg.getContent()); } } @Override public int getItemCount() { return mMsgList.size(); } }Demo下载