首页 > 学院 > 开发设计 > 正文

一篇日志弄清RecycleView

2019-11-06 09:38:20
字体:
来源:转载
供稿:网友

主要是分两部分

首先一部分是一个Activity里,负责初始化UI控件,准备数据Datas

package com.example.sjy.recycleview;import android.content.Intent;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.ActionBarActivity;import android.support.v7.widget.DefaultItemAnimator;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.Menu;import android.view.MenuItem;import java.util.ArrayList;import java.util.List;/** * Created by sjy_1993 on 2017/2/28. */public class MainActivity extends ActionBarActivity {    PRivate RecyclerView mRecycleView;    private List<String> mDatas;    private SimpleAdapter mAdapter;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initDatas();        initViews();        //进行adapter的设置           Context,数据        mAdapter = new SimpleAdapter(mDatas, this);        mRecycleView.setAdapter(mAdapter);        //设置布局        mRecycleView.setLayoutManager(new LinearLayoutManager(this,                LinearLayoutManager.VERTICAL, false));        //设置添加删除动画        mRecycleView.setItemAnimator(new DefaultItemAnimator());        //设置分割线        mRecycleView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));    }    private void initDatas() {        mDatas = new ArrayList<>();        for (int i = 'A'; i < 'z'; i++) {            mDatas.add("" + (char) i);//为什么前面加“”        }    }    private void initViews() {        //绑定视图        mRecycleView = (RecyclerView) findViewById(R.id.recyclerview);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    public boolean onOptionsItemSelected(MenuItem item) {        int id = item.getItemId();        switch (id) {            case R.id.pubuView: //瀑布流就是每个item不一样这里是进入瀑布流界面                Intent intent = new Intent(MainActivity.this,StaggeredGridActivity.class);                startActivity(intent);                break;            case R.id.gridView:                  //3列相册布局                mRecycleView.setLayoutManager(new GridLayoutManager(this, 3));                break;            case R.id.lineView:                  //仿照ListView                mRecycleView.setLayoutManager(new LinearLayoutManager(this));                break;            case R.id.action_add:            addData(1);                break;            case R.id.action_delete:           deleteData(1);                break;        }        return super.onOptionsItemSelected(item);    }}Activity的布局文件如下

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <android.support.v7.widget.RecyclerView        android:id="@+id/recyclerview"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></LinearLayout>

这里是item的布局界面

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:background="#55ff0000"    android:layout_width="match_parent"    android:layout_margin="3dp"    android:layout_height="72dp">    <TextView        android:id="@+id/text_num"        android:gravity="center"        android:background="@drawable/item_bg"        android:layout_width="match_parent"        android:layout_height="match_parent" /></FrameLayout>

这里是Adapter界面

package com.example.sjy.recycleview;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.RecyclerView.ViewHolder;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;/** * Created by sjy_1993 on 2017/2/28. */public class SimpleAdapter extends RecyclerView.Adapter<MyViewHolder>{    private LayoutInflater mInflater; //inflate      item的布局    private List<String> mDatas;    private Context mContext;    public interface OnItemClickListener{        void onItemClick(View view,int position);        void onItemLongClick(View view,int position);    }    private OnItemClickListener mOnItemClickListener;    public void setOnItemClickListener(OnItemClickListener listener){        this.mOnItemClickListener = listener;    }        //构造方法  自己创建的    public SimpleAdapter(List<String> datas, Context context ) {        this.mDatas = datas;        this.mContext = context;       mInflater = LayoutInflater.from(context);    }    //实现未实现的方法    @Override    public int getItemCount() {        return mDatas.size();    }    //绑定ViewHolder里的数据    @Override    public void onBindViewHolder(final MyViewHolder holder, final int position) {            //绑定数据显示在item里        holder.tv.setText(mDatas.get(position)); //设置监听事件  回调        holder.itemView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mOnItemClickListener.onItemClick(holder.itemView,position);            }        });        //longClick        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View view) {                mOnItemClickListener.onItemLongClick(holder.itemView,position);                return false;            }        });    }    //创建一个VIewHolder    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {       //得到上一层的View        View view = mInflater.inflate(R.layout.simple_item,parent,false);            //内容提供者        MyViewHolder viewHolder = new MyViewHolder(view); //  得到上一层的View里        return viewHolder;    }    public void addData(int pos){        mDatas.add("Insert one");        notifyItemChanged(pos);    }    public void deleteData(int pos)    {        mDatas.remove(pos);        notifyItemRemoved(pos);    }}    //自己写的ViewHolder    class MyViewHolder extends ViewHolder{        //当前Item所有的控件    TextView tv;    //arg0             相当于rootView    public MyViewHolder(View arg0){         super(arg0);        //进行View的初始化        tv = (TextView) arg0.findViewById(R.id.text_num);    }}

添加删除,增加动画

在标题栏上设置,此时在menu -main.xml菜单里设置

 <item     android:id="@+id/action_delete"     android:orderInCategory="100"     android:title="Delete"     android:icon="@drawable/ic_menu_delete"     app:showAsAction="ifRoom"/> <item     android:id="@+id/action_add"     android:orderInCategory="100"     android:title="Add"     android:icon="@drawable/ic_menu_add"     app:showAsAction="ifRoom"     /> <!--把图标显示在ActionBar上面

如果要设置监听的话,要自己写监听的内部类文件见上方SimpleAdapter里。最后要在主文件里写上如下监听代码

   //设置监听    mAdapter.setOnItemClickListener(new SimpleAdapter.OnItemClickListener() {        @Override        public void onItemClick(View view, int position) {            Toast.makeText(MainActivity.this,"您点击的位置是"+position,Toast.LENGTH_SHORT).show();        }        @Override        public void onItemLongClick(View view, int position) {            Toast.makeText(MainActivity.this,"您点击的位置是"+position,Toast.LENGTH_SHORT).show();        }    });}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表