recyclerview嵌套

最近在公司实习,要求做一个安卓TV端的应用。想实现一个在竖直方向和水平方向滑动的,类似于视频的历史记录的东西。搜了很久没有找到想要的代码,废了两天的功夫才做出一个简易版的,仅供参考。
效果图:这里写图片描述
hot,cold是一行水果的标签,水果可以滑动。

FruitAdapter类

package com.example.xji.recyclerviewtest;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;
import java.util.WeakHashMap;

public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
    private List<Fruit> mFruitList;

    static class ViewHolder extends RecyclerView.ViewHolder{
        View fruitView;
        ImageView fruitImage;
        TextView fruitName;
        public ViewHolder(View view){
            super(view);
            fruitView = view;
            fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
            fruitName =(TextView) view.findViewById(R.id.fruit_name);
        }
    }

    public FruitAdapter(List<Fruit> fruitList){
        mFruitList = fruitList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
        final ViewHolder holder = new ViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder,int position){
        Fruit fruit = mFruitList.get(position);
        holder.fruitImage.setImageResource(fruit.getImageId());
        holder.fruitName.setText(fruit.getName());
    }

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

}

FruitCategory类

package com.example.xji.recyclerviewtest;

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
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.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;
import java.util.WeakHashMap;

public class FruitCategoryAdapter extends RecyclerView.Adapter<FruitCategoryAdapter.ViewHolder> {
    private List<FruitCategory> mFruitCategoryList;

    private Context context;



    static class ViewHolder extends RecyclerView.ViewHolder{
        View fruitCategoryView;
        FruitAdapter adapter;
        TextView fruitKind;
        RecyclerView fruitRecyclerView;
        public ViewHolder(View view){
            super(view);
            fruitCategoryView = view;
            fruitKind = (TextView) view.findViewById(R.id.fruit_kind);
            fruitRecyclerView = (RecyclerView) view.findViewById(R.id.fruit_recycler_view);
        }
    }

    public FruitCategoryAdapter(List<FruitCategory> fruitCategoryList,Context context){
        mFruitCategoryList = fruitCategoryList;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit,parent,false);
        final ViewHolder holder = new ViewHolder(view);

        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder,int position){
        FruitCategory fruitCategory = mFruitCategoryList.get(position);
        holder.fruitKind.setText(fruitCategory.getKind());

        LinearLayoutManager layoutManager = new LinearLayoutManager(context);
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        holder.fruitRecyclerView.setLayoutManager(layoutManager);
        holder.fruitRecyclerView.setAdapter(new FruitAdapter(fruitCategory.getFruitList()));
    }

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

}

两个实体类就不放了。

MainActivity类

package com.example.xji.recyclerviewtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.util.Log;
import android.view.LayoutInflater;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

    private List<FruitCategory> fruitCategoryList = new ArrayList<>();
    private List<Fruit> fruitList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFruits();
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        //LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        //layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        //FruitAdapter adapter = new FruitAdapter(fruitList);
       // recyclerView.setAdapter(adapter);
        FruitCategoryAdapter adapter = new FruitCategoryAdapter(fruitCategoryList,this);
        recyclerView.setAdapter(adapter);
    }
    private void initFruits() {
        //测试数据。
        for (int i=0;i<3;i++) {
            Fruit apple = new Fruit(getRandomLengthName("Apple"), R.drawable.apple);
            fruitList.add(apple);
            Fruit banana = new Fruit(getRandomLengthName("Banana"), R.drawable.banana);
            fruitList.add(banana);
            Fruit orange = new Fruit(getRandomLengthName("Orange"), R.drawable.orange);
            fruitList.add(orange);
            Fruit watermelon = new Fruit(getRandomLengthName("Watermelon"), R.drawable.watermelon);
            fruitList.add(watermelon);
            Fruit pear = new Fruit(getRandomLengthName("Pear"), R.drawable.pear);
            fruitList.add(pear);
            Fruit grape = new Fruit(getRandomLengthName("Grape"), R.drawable.grape);
            fruitList.add(grape);
            Fruit strawberry = new Fruit(getRandomLengthName("Strawberry"), R.drawable.strawberry);
            fruitList.add(strawberry);
        }
        FruitCategory a = new FruitCategory("hot",fruitList);
        FruitCategory b = new FruitCategory("cold",fruitList);
        FruitCategory c = new FruitCategory("cold",fruitList);
        fruitCategoryList.add(a);
        fruitCategoryList.add(b);
        fruitCategoryList.add(c)

    }

    private String getRandomLengthName(String name){
        Random random = new Random();
        int length = random.nextInt(20) + 1;
        StringBuilder builder = new StringBuilder();
        for (int i=0;i<length;i++){
            builder.append(name);
        }
        return builder.toString();
    }

}

若有不对或是还能完善之处,请指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值