自定义RecyclerView之多条目加载

来源:互联网 发布:中文编程系统 编辑:程序博客网 时间:2024/05/17 12:03

主类 Activity:

package chenchneg20171009.bwie.com.lianxi10day13_1;import android.os.Bundle;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.DividerItemDecoration;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.Button;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements View.OnClickListener {    RecyclerView rv;    List<ItemBrean> list = new ArrayList<ItemBrean>();    MyAdapter myAdapter;    /**     * 网格     */    private Button mBt;    private SwipeRefreshLayout mSrl;    /**     * 网格     */    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        //初始化数据        rv = (RecyclerView) findViewById(R.id.rv);        show(true);    }    private void initView() {        mBt = (Button) findViewById(R.id.bt);        mBt.setOnClickListener(this);        mSrl = (SwipeRefreshLayout) findViewById(R.id.srl);        mSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {            @Override            public void onRefresh() {             Toast.makeText(MainActivity.this,"OnRefreshListener", Toast.LENGTH_SHORT).show();            //网络请求数据,然后更新列表                new Handler().postDelayed(new Runnable() {                    @Override                    public void run() {                        Toast.makeText(MainActivity.this,"数据请求成功", Toast.LENGTH_SHORT).show();                        List<ItemBrean> l=new ArrayList<ItemBrean>();                        for (int i=0;i<10;i++){                            ItemBrean itemBrean = new ItemBrean("名字" + i, "年龄" + i);                          l.add(itemBrean);                        }                       myAdapter.refresh(l);                        //关闭刷新                        mSrl.setRefreshing(false);                    }                },3000);            }        });    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.bt:                String str = mBt.getText().toString().trim();                if ("网格".equals(str)) {                    show(false);                    mBt.setText("垂直");                } else {                    show(true);                    mBt.setText("网格");                }                break;        }    }    private void show(boolean flag) {        //设置布局管理器        //垂直列表        // rv.setLayoutManager(new LinearLayoutManager(this));        //网格模式        // rv.setLayoutManager(new GridLayoutManager(this, 2));        //添加垂直分割线        rv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));        //水平分割线        RecyclerView.LayoutManager layoutManager = null;        if (flag) {            layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);        } else {            layoutManager = new GridLayoutManager(this, 2);        }        rv.setLayoutManager(layoutManager);        rv.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL));        //横向列表false是从左往右,ture是从右往左        // rv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));        for (int i = 0; i < 100; i++) {            ItemBrean itemBrean = new ItemBrean("name" + i, "age" + i);            list.add(itemBrean);        }        //创建适配器        myAdapter = new MyAdapter(this, list);        rv.setAdapter(myAdapter);        myAdapter.setonItemClick(new MyAdapter.OnItemListener() {            @Override            public void onItemClick(int psotion) {                Toast.makeText(MainActivity.this, "点击" + psotion, Toast.LENGTH_SHORT).show();            }            @Override            public void onItemlongClick(int postion) {                Toast.makeText(MainActivity.this, "长点击" + postion, Toast.LENGTH_SHORT).show();            }        });    }    public void refresh(){    }}
适配器 Adapter:

package chenchneg20171009.bwie.com.lianxi10day13_1;        import android.content.Context;        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;/** * Created by dell on 2017/10/13. */public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private Context context;    private List<ItemBrean> list;    private OnItemListener onItemListener;private static int TYPE1=0;    private static int TYPE2=1;    //接口回调    public interface OnItemListener{        public void  onItemClick(int psotion);        public void onItemlongClick(int postion);    }    public void setonItemClick(OnItemListener onItemListener){        this.onItemListener=onItemListener;    }    public MyAdapter(Context context, List<ItemBrean> list){        this.context=context;        this.list=list;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {       RecyclerView.ViewHolder viewHolder=null;        if(viewType==TYPE1){            View view= LayoutInflater.from(context).inflate(R.layout.item1,parent,false);            viewHolder = new Type1ViewHolder(view);        }else{          View view= LayoutInflater.from(context).inflate(R.layout.item2,parent,false);           viewHolder = new Type2ViewHolder(view);        }        return viewHolder;    }   //多条目加载判断方法    @Override    public int getItemViewType(int position) {        return position%2==0?TYPE1:TYPE2;    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {        if (holder instanceof Type1ViewHolder) {        ItemBrean itemBrean = list.get(position);        //强转        Type1ViewHolder type = (Type1ViewHolder) holder;        type.tvname.setText(itemBrean.getName());        type.tvage.setText(itemBrean.getAge());        //条目监听        type.ll.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                if (onItemListener != null) {                    onItemListener.onItemClick(position);                }            }        });        type.ll.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View view) {                if (onItemListener != null) {                    onItemListener.onItemlongClick(position);                }                return true;            }        });    }else{            Type2ViewHolder type2 = (Type2ViewHolder) holder;        }    }    @Override    public int getItemCount() {        return list.size();    }    private  class Type1ViewHolder extends RecyclerView.ViewHolder{        TextView tvname;        TextView tvage;        LinearLayout ll;        public Type1ViewHolder(View itemView) {            super(itemView);            tvname = itemView.findViewById(R.id.tv_name);            tvage = itemView.findViewById(R.id.tv_age);            ll = itemView.findViewById(R.id.ll);        }    }    //展示页面数据    public void refresh(List<ItemBrean> l) {        list.clear();        list.addAll(l);        notifyDataSetChanged();    }    private class Type2ViewHolder extends RecyclerView.ViewHolder{        public Type2ViewHolder(View itemView) {            super(itemView);        }    }}
新添加 XML:

<?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="45dp">    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:background="@mipmap/ic_launcher"/></LinearLayout>

原创粉丝点击