Android ListView的替代者RecyclerView

1.添加依赖:compile 'com.android.support:recyclerview-v7:24.2.1'


2.使用控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.mjon.myapplication.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="send" />

    </LinearLayout>

</LinearLayout>


3.RecyclerView子项布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/left_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:background="@drawable/chat">

        <TextView
            android:id="@+id/left_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="10dp" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/right_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:background="@drawable/chat">

        <TextView
            android:id="@+id/right_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="10dp" />

    </LinearLayout>

</LinearLayout>


4.实体类:

package com.example.mjon.myapplication;

public class Message {

    public static final int TYPE_RECEIVER = 0;  //接收
    public static final int TYPE_SEND = 1;  //发送
    private String content;  //内容
    private int type;

    public Message(String content, int type) {
        this.content = content;
        this.type = type;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }
}


5.自定义适配器:

package com.example.mjon.myapplication;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;

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

    private List<Message> iData;

    public MyBaseAdapter(List<Message> iData) {
        this.iData = iData;
    }

    static class ViewHolder extends RecyclerView.ViewHolder {

        private LinearLayout left_layout;
        private LinearLayout right_layout;
        private TextView left_tv;
        private TextView right_tv;

        public ViewHolder(View itemView) {
            super(itemView);
            left_layout = (LinearLayout) itemView.findViewById(R.id.left_layout);
            right_layout = (LinearLayout) itemView.findViewById(R.id.right_layout);
            left_tv = (TextView) itemView.findViewById(R.id.left_message);
            right_tv = (TextView) itemView.findViewById(R.id.right_message);
        }
    }

    @Override
    public MyBaseAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_list, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MyBaseAdapter.ViewHolder holder, int position) {
        Message message = iData.get(position);
        if (message.getType() == Message.TYPE_RECEIVER) {
            holder.left_layout.setVisibility(View.VISIBLE);
            holder.right_layout.setVisibility(View.GONE);
            holder.left_tv.setText(message.getContent());
        } else if (message.getType() == Message.TYPE_SEND) {
            holder.right_layout.setVisibility(View.VISIBLE);
            holder.left_layout.setVisibility(View.GONE);
            holder.right_tv.setText(message.getContent());
        }
    }

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


6.MainActivity:

package com.example.mjon.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private List<Message> iData = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initMessage();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        MyBaseAdapter myBaseAdapter = new MyBaseAdapter(iData);
        recyclerView.setAdapter(myBaseAdapter);
    }

    private void initMessage() {
        iData.add(new Message("早~肖明", 0));
        iData.add(new Message("早~", 1));
        iData.add(new Message("你昨天把作业上交了吗,我想改下资料", 0));
        iData.add(new Message("OK?", 0));
        iData.add(new Message("我昨天晚上已经上交了", 1));
    }
}



猜你喜欢

转载自blog.csdn.net/march0000/article/details/80252887