RecyclerView、Viewpage、GridView组合用法

来源:互联网 发布:代尔夫特理工大学 知乎 编辑:程序博客网 时间:2024/06/08 10:00


RecyclerVie的头布局中添加ViewPage,以GridView做为其内部数据做填充。效果图:

 

1.布局文件设置

1.在主布局文件中添加RecyclerView

<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_view"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
/>

 

2.RecyclerView中项目的布局

添加一个TextView

<TextView
    android:id="@+id/recycler_textview"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:text="name"
/>

 

3.RecyclerView的头布局即ViewPage

添加一个Viewpage

<android.support.v4.view.ViewPager
    android:id="@+id/recycler_head_test"
    android:layout_width="match_parent"
    android:layout_height="200dp"
>
</android.support.v4.view.ViewPager>

 

4.GridView 的布局

 

<ImageView
    android:id="@+id/mageview_gridview"
    android:src="@mipmap/ic_launcher"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
/>

<TextView
    android:id="@+id/textview_gridView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
/>

 

2.MainActivity中初始化数据,(RecycleView和GridView的数据),并设置RecycleView

public class MainActivityextends AppCompatActivity {

    List<String> datalist;
    List<GridView> gridviewlist;
    String TAG="0123";
    private List<String>mdateList;
    private RecyclerViewmrecyclerView;
    private MAdapter mAdapter;

    @Override
    protected voidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initDate();
        mrecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mrecyclerView.setLayoutManager(newLinearLayoutManager(this));
        mrecyclerView.setItemAnimator(newDefaultItemAnimator());
        mrecyclerView.setAdapter(mAdapter= new MAdapter());
    }


    protected void initDate(){
        mdateList = new ArrayList<String>();
        for(inti=1;i<=100;i++) {
            String name = i+"fgrogyfbagrvg";
            mdateList.add(name);
        }
    }

    

    public  void inigridviewlist(intdatelistSize){
        gridviewlist =new ArrayList<>();

        int num = (int)Math.ceil(datelistSize/8.0) ;
        Log.d("Main","num= "+num);
        for(inti=0;i<num;i++){
            GridView gridviwe = new GridView(this);
            gridviwe.setNumColumns(4);
            int start  = i*8;
            int end = Math.min(i*8+8,datelistSize);
            Log.d(TAG,"start="+start+"     end="+end+"  datelistSize"+datelistSize);
            List<String> date=datalist.subList(start,end);
            Log.d(TAG,""+date);
            gridviwe.setAdapter(new GridviewAdapter(date,MainActivity.this));
            gridviewlist.add(gridviwe);

        }
    }
    public void initDateList(){
        datalist = new ArrayList<>();
        for (inti=0;i<24;i++){
            String name = "kuahgyffaury"+i;
            datalist.add(name);
        }
        Log.d(TAG,"datalist="+datalist);

    }
}

3.三者的适配器

1.RecyclerView

class MAdapter extends RecyclerView.Adapter{

    @Override
    publicRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MViewHolder holder = null
        MyHeadHolder headHolder = null;

        if (viewType == 1){
            headHolder  = new MyHeadHolder(MainActivity.this.getLayoutInflater().inflate(R.layout.recycler_head_test,null));
            return headHolder;
        }else{
            holder  = new MViewHolder(MainActivity.this.getLayoutInflater().inflate(R.layout.recycle_test,null));
            return holder;
        }


    }

    @Override
    public voidonBindViewHolder(RecyclerView.ViewHolder holder, intposition) {
        if(position>0){
            MViewHolder holder1 = (MViewHolder) holder;
            ((MViewHolder) holder).textView.setText(mdateList.get(position));
        }
        if (position ==0){
            MyHeadHolder holder1 = (MyHeadHolder) holder;


        }

    }

    @Override
    public intgetItemViewType(int position) {
        if( position == 0 ){
            return 1;
        }else{
            return 2;
        }
    }

    @Override
    public intgetItemCount() {
        return mdateList.size();
    }

    class MViewHolder extends RecyclerView.ViewHolder{
        public TextView textView;
        public MViewHolder (View view){
            super(view);
            textView = (TextView) view.findViewById(R.id.recycler_textview);
        }
    }

    class MyHeadHolder extends RecyclerView.ViewHolder{

        public ViewPagerviewPager;
        public MyHeadHolder(View view) {
            super(view);
            initDateList();
            inigridviewlist(datalist.size());
            viewPager = (ViewPager) view.findViewById(R.id.recycler_head_test);
            viewPager.setAdapter(newViewpageAdapter(gridviewlist,MainActivity.this));
        }
    }
}

2.GridviewAdapter

public class GridviewAdapterextends BaseAdapter {

    List<String> datalist;
    Activity activity;

    public GridviewAdapter(List<String> datalist, Activity activity){
        this.activity= activity;
        this.datalist= datalist;
    }


    @Override
    public intgetCount() {
        return datalist.size();
    }

    @Override
    publicObject getItem(int position) {
        return datalist.get(position);
    }

    @Override
    public longgetItemId(int position) {
        return position;
    }

    @Override
    publicView getView(int position, View convertView, ViewGroup parent) {
        View view = (View) activity.getLayoutInflater().inflate(R.layout.gridview_layout,null);
        TextView textView = (TextView) view.findViewById(R.id.textview_gridView);
        textView.setText(datalist.get(position));

        return view;
    }
}

3.ViewPage

public class ViewpageAdapter extendsPagerAdapter {

    List<GridView> gridViewList;
    Activity activity;

    public ViewpageAdapter(List<GridView> gridViewList, Activity activity){
        this.activity= activity;
        this.gridViewList= gridViewList;
    }

    @Override
    public intgetCount() {
        return gridViewList.size();
    }

    @Override
    public booleanisViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    publicObject instantiateItem(ViewGroup container, intposition) {
        container.addView(gridViewList.get(position));
        return  gridViewList.get(position);
    }

    @Override
    public voiddestroyItem(ViewGroup container, intposition, Object object) {
        container.removeView(gridViewList.get(position));
    }
}