RecyclerView嵌套RecyclerView

在項目中有時候遇到recyclerview嵌套recyclerview的情況,雖然不建議這樣嵌套使用,但有時候也沒辦法。
示例:
這裏寫圖片描述
代碼如下:
1、在Activity中代碼如下

package com.example.recyclerview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;

import adapter.MyListAdapter;

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerview;
    private ArrayList list;
    private MyListAdapter listAdapter;
    private LinearLayoutManager linearLayoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerview= (RecyclerView) findViewById(R.id.recyclerview);
        linearLayoutManager=new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerview.setLayoutManager(linearLayoutManager);
        initDate();
        listAdapter=new MyListAdapter(this,list);
        recyclerview.setAdapter(listAdapter);
    }
    private void initDate() {
        list=new ArrayList();
        for(int i=0;i<15;i++){
            list.add("this is "+i);
        }
    }
}

2、在ListAdapter中

package adapter;

import android.content.Context;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.recyclerview.R;

import java.util.ArrayList;

/**
 * Created by Administrator on 2016/12/11.
 */

public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.MyViewHolder> {

    private ArrayList list;
    private Context context;
    private GridLayoutManager gridLayoutManager;
    private ArrayList list_image;

    public MyListAdapter(Context context, ArrayList list) {
        this.list = list;
        this.context = context;
        gridLayoutManager =new GridLayoutManager(context,3);
        gridLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        list_image=new ArrayList();
        list_image.add("http://e.hiphotos.baidu.com/movie/pic/item/7aec54e736d12f2ec564664446c2d562853568b5.jpg");
        list_image.add("http://c.hiphotos.baidu.com/movie/pic/item/e4dde71190ef76c6e52d8fe29516fdfaae51677f.jpg");
        list_image.add("http://c.hiphotos.baidu.com/movie/pic/item/fd039245d688d43f5d3648ec741ed21b0ef43b15.jpg");
        list_image.add("http://e.hiphotos.baidu.com/movie/pic/item/1ad5ad6eddc451da65ded2f5bffd5266d0163280.jpg");
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.list_item, null);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.tv.setText(list.get(position).toString());
        if(list_image.size()>0) {
            holder.recyclerImage.setLayoutManager(gridLayoutManager);
            ImageAdapter adapter = new ImageAdapter(context, list_image);
            holder.recyclerImage.setLayoutManager(new GridLayoutManager(context, 3));
            holder.recyclerImage.setAdapter(adapter);
        }else{
            holder.recyclerImage.setVisibility(View.INVISIBLE);
        }
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv;
        RecyclerView recyclerImage;
        public MyViewHolder(View itemView) {
            super(itemView);
            tv= (TextView) itemView.findViewById(R.id.text);
            recyclerImage= (RecyclerView) itemView.findViewById(R.id.recyclerImage);
        }
    }
}

3、最後在List中嵌套recyclerview代碼

package adapter;

import android.app.Activity;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.bumptech.glide.Glide;
import com.example.recyclerview.R;

import java.util.ArrayList;

/**
 * Created by Administrator on 2016/12/11.
 */

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyImageHolder> {
    private Context context;
    private ArrayList list;
    private DisplayMetrics dm;

    public ImageAdapter(Context context, ArrayList list){
        this.context=context;
        this.list=list;
        dm = new DisplayMetrics();
        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
    }
    @Override
    public MyImageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(context).inflate(R.layout.list_image,null);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams((dm.widthPixels - dip2px(20)) / 3, (dm.widthPixels - dip2px(20)) / 3);
        view.setLayoutParams(lp);
        MyImageHolder holder=new MyImageHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyImageHolder holder, int position) {
        Glide.with(context)
                .load(list.get(position))
                .centerCrop()
                .crossFade()
                .into(holder.imageView);
        holder.itemView.setTag(list.get(position));

    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    class MyImageHolder extends RecyclerView.ViewHolder{
        private ImageView imageView;
        public MyImageHolder(View itemView) {
            super(itemView);
            imageView= (ImageView) itemView.findViewById(R.id.imageview);
        }
    }
    int dip2px(float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
}

代碼下載地址:
http://download.csdn.net/detail/androidxiaogang/9708426

參考大白博客
http://blog.csdn.net/baiyuliang2013/article/details/51518868

發佈了142 篇原創文章 · 獲贊 265 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章