- RecyclerView的用途:
- 可以做成listview的效果
- 可以做成GlidView的效果
- Item的设置:通过ItemDecoration设置item的间隔,通过ItemAnimator设置增删的动画。
- 代码:
- 布局文件RecyclerView:
- <?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:orientation="vertical"> <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>
- 布局文件RecyclerView_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="wrap_content" android:background="@color/colorAccent" android:orientation="vertical"> <TextView android:id="@+id/tv1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Name" /> <TextView android:id="@+id/tv2" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="Number" /> </LinearLayout>
- Adpater:
- package com.example.administrator.recyclerviewdemo; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; /** * Created by Administrator on 2016/10/8. */ public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { private List<DataBean> mData; private Context context; private LayoutInflater mInflater; public RecyclerViewAdapter(Context context, List<DataBean> mData) { this.context = context; this.mData = mData; this.mInflater = LayoutInflater.from(context); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.recyclerview_item, parent, false); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.textView1.setText(mData.get(position).getName()); holder.textView2.setText(mData.get(position).getNumber()); } @Override public int getItemCount() { return mData.size(); } class MyViewHolder extends RecyclerView.ViewHolder { TextView textView1; TextView textView2; public MyViewHolder(View itemView) { super(itemView); textView1 = (TextView) itemView.findViewById(R.id.tv1); textView2 = (TextView) itemView.findViewById(R.id.tv2); } } }
- 把控件写到MyViewHolder中,并且findViewById,随后在onCreateViewHolder中创建这个VH,需要通过inflate加载布局,然后创建并且初始化MyViewHolder,初始化需要传入一个View值 ,把布局传进去。最后是onBindViewHolder进行赋值。
- Activity:
- package com.example.administrator.recyclerviewdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.Menu; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private List<DataBean> mDatas; private DataBean mData; private RecyclerViewAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.recyclerview); initDatas(); initViews(); mAdapter = new RecyclerViewAdapter(this, mDatas); mRecyclerView.setAdapter(mAdapter); //设置显示类型,是ListView LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(linearLayoutManager); } private void initViews() { mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); } private void initDatas() { mDatas = new ArrayList<>(); for (int i = 0; i < 20; i++) { mData = new DataBean(); mData.setName("名字:" + i); mData.setNumber("编号:" + i); mDatas.add(mData); } } @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } }
- DataBean 是一个数据类。mAdapter实例化,传入上下文以及数据,然后,给RecyclerView设置适配器, mRecyclerView.setLayoutManager(linearLayoutManager);设置显示的样式:ListView,还是GridView,横向滑动还是纵向滑动,现在我设置是ListView纵向滑动的,LinearLayoutManager.VERTICAL 换成HORIZONTAL 就是横向滑动的了。当把LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); 改为GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4);的时候,又变成网格的了。4代表分为4列显示,然后,把gridLayoutManager 传入RecyclerView中。
- 布局文件RecyclerView: