1. 程式人生 > >Android開發學習--RecycleView入門

Android開發學習--RecycleView入門

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入門