Android5.0的RecycleView技术

来源:互联网 发布:姚明05-06赛季数据 编辑:程序博客网 时间:2024/06/05 23:48
RecycleView
RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视图复用。

RecyclerView有什么优点呢?
他可以通过设置LayoutManager来快速实现listview、gridview、瀑布流的效果,而且还可以设置横向和纵向显示,
  ListVew GridView
                                                             
RecycleView添加动画效果也非常简单(自带了ItemAnimation,可以设置加载和移除时的动画,方便做出各种动态浏览的效果),
控制Item的间隔 可以通过ItemDecoration
但RecycleVie并未自带点击响应事件方法,点击事件要自己写。
Google官方推荐使用。
RecycleView的使用方法:
1.要使用RecycleView首先要在build.gradle下引入jar包:
如我的是 compile 'com.android.support:recyclerview-v7:23.3.0'
2.在activityt_main.xml文件中简单定义:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <android.support.v7.widget.RecyclerView        android:id="@+id/id_recycleview"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>
3.在MainActivity中使用
public class MainActivity extends AppCompatActivity {    private RecyclerView recyclerView;    private List<String> data;    private ItemAdapter adapter;//自定义Adapter    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        recyclerView = (RecyclerView) findViewById(R.id.id_recycleview);        initData();        adapter=new ItemAdapter(MainActivity.this, data);        recyclerView.setAdapter(adapter);        //设置RecycleView的布局管理        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);        recyclerView.setLayoutManager(linearLayoutManager);        //设置RecycleView的Item间分割线        DividerItemDecoration dector = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST);        recyclerView.addItemDecoration(dector);        //设置默认动画        recyclerView.setItemAnimator(new DefaultItemAnimator());        //添加点击Item事件        adapter.setOnItemClickListener(new SimpleAdapter.OnItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(MainActivity.this,"Click:"+position,Toast.LENGTH_SHORT).show();            }            @Override            public void onLongItemClick(View view, int position) {                Toast.makeText(MainActivity.this,"LongClick:"+position,Toast.LENGTH_SHORT).show();            }        });    }    //添加数据    private void initData() {        data = new ArrayList<String>();        for (int i = 'A'; i <= 'Z'; i++) {            data.add("" + (char) i);        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_main, menu);        return true;    }    //菜单栏选择不同显示    @Override    public boolean onOptionsItemSelected(MenuItem item) {        int id=item.getItemId();        switch(id){            case R.id.action_add:                adapter.addItem(1);                break;            case R.id.action_Delete:                adapter.deleteItem(1);                break;            case R.id.action_listView://显示ListView                recyclerView.setLayoutManager(new LinearLayoutManager(this));                break;            case R.id.action_gridView://显示GridView                recyclerView.setLayoutManager(new GridLayoutManager(this,3));                break;            case R.id.action_hor_gridView://显示水平GridView                recyclerView.setLayoutManager(new StaggeredGridLayoutManager(5,StaggeredGridLayoutManager.HORIZONTAL));                break;            case R.id.action_staggered://显示瀑布流                break;            default:                break;                    }        return super.onOptionsItemSelected(item);    }}
4.ItemAdapter的编写
public class ItemAdapter extends RecyclerView.Adapter<MyViewHolder>{    private List<String> data;    private Context context;    private LayoutInflater inflater;    //自己编写一个按钮点击事件接口    public interface OnItemClickListener{         void onItemClick(View view,int position);         void onLongItemClick(View view,int position);    }    public OnItemClickListener onItemClickListener;    public void setOnItemClickListener(OnItemClickListener onItemClickListener){        this.onItemClickListener=onItemClickListener;    }    public ItemAdapter(Context context, List<String> data) {        this.data = data;        this.context = context;        this.inflater = inflater.from(context);    }    //创建ViewHolder    @Override    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {        View view=inflater.inflate(R.layout.simpleadapter,viewGroup,false);        MyViewHolder viewHolder=new MyViewHolder(view);        return viewHolder;    }    //绑定ViewHolder    @Override    public void onBindViewHolder(final MyViewHolder myViewHolder, final int i) {        //设置值        myViewHolder.tv.setText(data.get(i));        if(onItemClickListener!=null){            myViewHolder.itemView.setOnClickListener(new View.OnClickListener(){                @Override                public void onClick(View v) {                    int LayoutPosition=myViewHolder.getLayoutPosition();                    onItemClickListener.onItemClick(myViewHolder.itemView, LayoutPosition);                }            });            myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {                @Override                public boolean onLongClick(View v) {                    int LayoutPosition=myViewHolder.getLayoutPosition();                    onItemClickListener.onLongItemClick(myViewHolder.itemView,LayoutPosition);                    return false;                }            });        }    }    @Override    public int getItemCount() {        return data.size();    }    public void addItem(int pos){        data.add(pos,"insert one");        notifyItemInserted(pos);    }    public void deleteItem(int pos){        data.remove(pos);        notifyItemRemoved(pos);    }}//创建ViewHolder类class MyViewHolder extends ViewHolder {    TextView tv;    public MyViewHolder(View itemView) {        super(itemView);        tv= (TextView) itemView.findViewById(R.id.tv_adapter);    }}
ItemAdapter的xml布局包含一个TextView控件



0 0