android RecycleView的使用

来源:互联网 发布:数据库实时备份 编辑:程序博客网 时间:2024/05/18 07:08

1、说明

这个空间可以说是升级版的ListView,支持不同的排列,还支持动画。

2、关于这个控件需要掌握的一下几点

1:实现自定义布局;
2:实现增加和删除;
3:实现控件的点击;
4:实现动画效果。
5:实现不同的展示效果横排的ListView效果,GridView效果。

3、直接上代码

1、Item布局

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="80dp"    android:layout_margin="5dp"    android:background="@color/colorAccent"    android:layout_gravity="center">    <TextView        android:id="@+id/id_tv"        android:layout_width="72dp"        android:layout_height="72dp"        android:layout_gravity="center"        android:gravity="center"        android:textSize="50sp"        android:textColor="#000"        android:text="good"/></FrameLayout>

2、继承RecycleView.Adapter:

interface OnItemListener通过这个借口实现控件点击的监听

** * 微信:yafeihou  * Created by 侯亚飞 on 2016/6/5. */public class MySimpleAdapter extends RecyclerView.Adapter<MyViewHolder> {    private LayoutInflater inflater ;    private Context context ;    private List<String> datas ;/***用于设置监听的接口*/    public interface OnItemListener{         void onClickListerner(View view, int pos);         void onLongClickListerner(View view, int pos);    }//定义一个接口    private OnItemListener onItemListener ;//供外部使用的接口类    public void setOnItemListener(OnItemListener onItemListener){        this.onItemListener = onItemListener;    }    public MySimpleAdapter(Context context, ArrayList<String> datas) {        this.context = context ;        this.datas = datas;        inflater = LayoutInflater.from(context);    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //创建item 布局!!!!!!!!!!!!!!!!        View view = inflater.inflate(R.layout.item_layout,parent,false);        //        MyViewHolder holder = new MyViewHolder(view);        return holder ;    }    @Override    public void onBindViewHolder(final MyViewHolder holder, final int position) {        //给每个控件设置值        holder.textView.setText(datas.get(position));    //在这里实现控件的        if (onItemListener!=null){            holder.textView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    int position =  holder.getLayoutPosition();                    onItemListener.onClickListerner(holder.textView,position);                }            });            holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {                @Override                public boolean onLongClick(View v) {                    int position =  holder.getLayoutPosition(); ///!!!!!!!!!!!!!!!!!!!!!!!用这个获取所点击的item的位置//调用接口中的方法              onItemListener.onLongClickListerner(holder.textView,position);                    return false ;                }            });        }    }    @Override    public int getItemCount() {        return datas.size();    }    /**     * 添加一条记录     */    public void addData(int position){        datas.add(position,"&");        //用这一句表示添加一条记录        notifyItemInserted(position);    }    /**     * 删除一条记录     */    public void deleteData(int position){        datas.remove(position);    //用这一句表示删除一条数据记录        notifyItemRemoved(position);    }}//自定义的内部类,用于获取所有的控件class MyViewHolder extends RecyclerView.ViewHolder{    TextView textView ;    public MyViewHolder(View itemView) {        super(itemView);        textView = (TextView) itemView.findViewById(R.id.id_tv);    }}

4、Activity代码

public class MainActivity extends AppCompatActivity {     private RecyclerView myRecycleView ;    private ArrayList<String> dataLists = new ArrayList<>();    private MySimpleAdapter adapter ; //普通适配器    //private StaggerAdapter staggerAdapter ; //瀑布流适配器    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);        fab.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                        .setAction("Action", null).show();            }        });        //初始化控件        initView();        //初始化数据        iniDatas();        //设置Adapter        adapter = new MySimpleAdapter(getApplicationContext(),dataLists);        myRecycleView.setAdapter(adapter);        //设置布局样式        LinearLayoutManager linearLayoutManager  = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL                ,false);        myRecycleView.setLayoutManager(linearLayoutManager);        //设置动画        myRecycleView.setItemAnimator(new DefaultItemAnimator());        //设置监听        adapter.setOnItemListener(new MySimpleAdapter.OnItemListener() {            @Override            public void onClickListerner(View view, int pos) {                Toast.makeText(getApplicationContext(),dataLists.get(pos),Toast.LENGTH_SHORT).show();            }            @Override            public void onLongClickListerner(View view, int pos) {                Toast.makeText(getApplicationContext(),dataLists.get(pos)+"good",Toast.LENGTH_SHORT).show();               new  AlertDialog.Builder(MainActivity.this).setTitle("newB").setMessage(dataLists.get(pos)+"good").create().show();            }        });    }    private void iniDatas() {        for (int i='A';i<='z';i++){            dataLists.add(""+(char)i);        }    }    private void initView() {        myRecycleView = (RecyclerView) findViewById(R.id.id_recycleView);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        //noinspection SimplifiableIfStatement        if (id == R.id.action_horizontal) {            //设置布局样式            LinearLayoutManager linearLayoutManager  = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);            myRecycleView.setLayoutManager(linearLayoutManager);            return true;        }        if (id == R.id.action_vertical) {            //设置布局样式            LinearLayoutManager linearLayoutManager  = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);            myRecycleView.setLayoutManager(linearLayoutManager);            return true;        }        if (id == R.id.action_GridView) {            //设置布局样式            GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3,LinearLayoutManager.VERTICAL,false);           // LinearLayoutManager linearLayoutManager  = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);            myRecycleView.setLayoutManager(gridLayoutManager);            return true;        }        if (id == R.id.action_GridViewHorizontal) {            //设置布局样式            GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3,GridLayoutManager.HORIZONTAL,false);            // LinearLayoutManager linearLayoutManager  = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);            myRecycleView.setLayoutManager(gridLayoutManager);            return true;        }        if (id == R.id.action_delete) {            //先判断是哪个适配器            adapter.deleteData(2);            return true;        }        if (id == R.id.action_add) {            adapter.addData(2);            return true;        }        return super.onOptionsItemSelected(item);    }}

5、来几张效果图

竖排布局

横排布局

竖排的grid布局

横排的grid布局

长按实现的对话框

0 1
原创粉丝点击