Android5.0的RecycleView技术

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
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值