RecyclerView学习demo

来源:互联网 发布:淘宝四钻店铺转让 编辑:程序博客网 时间:2024/04/30 16:00

写个demo说明:
1、build.gradle中配置包:

 compile 'com.android.support:recyclerview-v7:23.0.+'

2、activity_main.xml中使用;

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.recyclerview.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/recycler"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:scrollbars="vertical">    </android.support.v7.widget.RecyclerView></RelativeLayout>

3、编辑Adapter:

package com.recyclerview;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/** * Created by c9736 on 2017/1/5. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{    public interface OnItemListener{        void onItemClick(View view, int position);        void onItemLongClick(View view , int position);    }    private OnItemListener onItemListener;    public void setOnItemListener(OnItemListener onItemListener) {        this.onItemListener = onItemListener;    }    private List<String> datas;    public MyAdapter (List<String>  datas){        this.datas=datas;    }    public void addData(int position){        datas.add(position,"insert"+position);        notifyItemInserted(position);    }    public void removeData(int position){        datas.remove(position);        notifyItemRemoved(position);    }    //创建新view    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);        ViewHolder viewHolder=new ViewHolder(view);        return viewHolder;    }    @Override    public void onBindViewHolder(final ViewHolder holder, int position) {        holder.textView.setText(datas.get(position));        if(onItemListener!=null){            holder.textView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View view) {                    int pos=holder.getLayoutPosition();                    onItemListener.onItemClick(holder.itemView,pos);                }            });            holder.textView.setOnLongClickListener(new View.OnLongClickListener() {                @Override                public boolean onLongClick(View view) {                    int pos=holder.getLayoutPosition();                    onItemListener.onItemLongClick(holder.itemView,pos);                    return false;                }            });        }    }    @Override    public int getItemCount() {        return datas.size();    }    public class ViewHolder extends RecyclerView.ViewHolder{        public TextView textView;        public ViewHolder(View view) {            super(view);            textView= (TextView) view.findViewById(R.id.textView);        }    }}

4、activity中使用;

package com.recyclerview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private List<String> mDatas;    RecyclerView recyclerView=null;    RecyclerView.LayoutManager layoutManager=null;    MyAdapter myAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initDatas();        recyclerView= (RecyclerView) findViewById(R.id.recycler);        //layoutManager=new LinearLayoutManager(this);//使用LinearyLayout布局显示        //layoutManager=new GridLayoutManager(this,4);//使用GridLayout方式显示,每行显示4个        //layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);//使用瀑布流式布局 VERTICAL代表有2列        layoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL);//使用瀑布流式布局 HORIZONTAL代表有2行        recyclerView.setLayoutManager(layoutManager);        recyclerView.setHasFixedSize(true);        myAdapter=new MyAdapter(mDatas);        myAdapter.setOnItemListener(new MyAdapter.OnItemListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(getApplicationContext(), position + " click",                        Toast.LENGTH_SHORT).show();            }            @Override            public void onItemLongClick(View view, int position) {                Toast.makeText(getApplicationContext(), position + " long click",                        Toast.LENGTH_SHORT).show();                myAdapter.removeData(position);            }        });        recyclerView.setAdapter(myAdapter);        //添加动画        recyclerView.setItemAnimator(new DefaultItemAnimator());        //设置分隔 LayoutManager适用,DividerItemDecoration类没有提供,可以从网上拷贝来       /* recyclerView.addItemDecoration(new DividerItemDecoration(this,                DividerItemDecoration.VERTICAL_LIST));*/    }    private void initDatas() {        mDatas = new ArrayList<String>();        for (int i = 'A'; i < 'z'; i++)        {            mDatas.add("" + (char) i);        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main,menu);        return super.onCreateOptionsMenu(menu);    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()){            case R.id.add:                myAdapter.addData(1);                break;            case R.id.remove:                myAdapter.removeData(1);                break;        }        return true;    }}

6、菜单栏布局;

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/add"        android:title="add"      />    <item        android:id="@+id/remove"        android:title="remove"      /></menu>

7、item布局;

<?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="match_parent"    android:padding="2dp">    <TextView        android:id="@+id/textView"        android:textSize="20sp"        android:layout_width="50dp"        android:layout_height="50dp" /></LinearLayout>
0 0
原创粉丝点击