Android開發學習--RecycleView入門
阿新 • • 發佈:2017-07-11
too ride bundle 布局管理 manager 大量數據 andro height his
該控件用於在有限的窗口中展示大量數據集,其實這樣功能的控件我們並不陌生,例如:ListView、GridView
通過設置它提供的不同LayoutManager,ItemDecoration , ItemAnimator實現令人瞠目的效果。
- 你想要控制其顯示的方式,請通過布局管理器LayoutManager
- 你想要控制Item間的間隔(可繪制),請通過ItemDecoration
- 你想要控制Item增刪的動畫,請通過ItemAnimator
- 你想要控制點擊、長按事件,請自己寫
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v7.widget.RecyclerView android:id="@+id/id_recyclerview_horizontal"android:layout_width="match_parent" android:layout_height="120dp" android:layout_centerVertical="true" android:scrollbars="none" /> </RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="120dp" android:layout_height="120dp"> <ImageView android:id="@+id/iv" android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_margin="5dp" android:scaleType="centerCrop"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/iv" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:text="some info" android:textSize="12dp" /> </RelativeLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity { private RecyclerView mRV; private List<Integer> mDatas; private GalleryAdapter madapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); mRV = (RecyclerView) findViewById(R.id.id_recyclerview_horizontal); LinearLayoutManager li = new LinearLayoutManager(this); li.setOrientation(LinearLayoutManager.HORIZONTAL); mRV.setLayoutManager(li);//設置布局管理器 madapter = new GalleryAdapter(this,mDatas); mRV.setAdapter(madapter);//設置adapter } private void initData(){ mDatas = new ArrayList<Integer>(Arrays.asList(R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.e, R.drawable.f, R.drawable.g)); } }
GalleryAdapter.java
public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> { private LayoutInflater mInflter; private List<Integer> mdatas; public GalleryAdapter(Context context, List<Integer> datas){ mInflter = LayoutInflater.from(context); mdatas = datas; } /** * 我們創建的ViewHolder必須繼承RecyclerView.ViewHolder,這個RecyclerView.ViewHolder的 * 構造時必須傳入一個View,這個View相當於我們ListView getView中的convertView * (即:我們需要inflate的item布局需要傳入)。 */ public class ViewHolder extends RecyclerView.ViewHolder{ public ViewHolder(View v){ super(v); } ImageView miv; TextView mtv; } //創建ViewHoler @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflter.inflate(R.layout.item,parent,false); ViewHolder viewHolder = new ViewHolder(view); viewHolder.miv = (ImageView) view.findViewById(R.id.iv); return viewHolder; } //設置值;將數據綁定至viewholder @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.miv.setImageResource(mdatas.get(position)); } //有多少條數據 @Override public int getItemCount() { return mdatas.size(); } }
Android開發學習--RecycleView入門