思路:RecycleView嵌套一個RecycleView首先要確定一個rootRecycleView這個rootRecycleView是要包含多個子RecycleView,在寫rootRecycleView的適配器的時候其子項就是一個recycleView,然后再onBindViewHolder方法中為子recycleView設置自己的適配器。子recycleView的適配器就跟普通的適配器一樣設置就行。下面是RootRecycleViewAdapter。
public class RootRecycleViewAdapter extends RecyclerView.Adapter {
private ArrayList<RecyclerView.Adapter> adapterArrayList;
private Context context;
public RootRecycleViewAdapter(ArrayList<RecyclerView.Adapter> arrayList) {
this.adapterArrayList = arrayList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_first, parent, false);
MyHolder holder = new MyHolder(view);
context=parent.getContext();
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {//你也可以在這里為每個子RecycleView設置不同的布局:比如GridLayout,LinearLayout等
MyHolder myHolder = (MyHolder) holder;
//先把子類的適配器放入一個ArrayList的集合中然后根據相應的位置獲取不同的子類適配器
myHolder.recycleView.setAdapter(adapterArrayList.get(position));//設置子類自己的適配器
}
@Override
public int getItemCount() {
return adapterArrayList.size();//返回子類適配器的數目
}
class MyHolder extends RecyclerView.ViewHolder {
RecyclerView recycleView;
public MyHolder(View itemView) {
super(itemView);
recycleView = (RecyclerView) itemView.findViewById(R.id.first_recycle);
}
}
}
下面是MainActivity的代碼
public class MainActivity extends AppCompatActivity {
private MyRecycleView rootRecycle;
private ArrayList<RecyclerView.Adapter> adapterArrayList;
private FirstRecycleAdapter firstAdapter;
private SecondRecycleAdapter secondAdapter;
private RecyclerViewUtil util;
private RootRecycleViewAdapter rootAdapter;
private FourRecycleAdapter fourRecycleAdapter;
private ThridRecycleAdapter thridRecycleAdapter;
private ContentLoadingProgressBar progressBar;
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.content_main_fragment);
intit();
rootAdapter = new RootRecycleViewAdapter(adapterArrayList);//自己寫的工具類就是為rootRecyclView設置適配器
util = new RecyclerViewUtil(rootRecycle, rootAdapter, this);
}
public void intit() {//第一個子適配器設置
adapterArrayList = new ArrayList<>();
ArrayList<FirstRecycleData> firstRecycleDatas = new ArrayList<>();
for (int i = 0; i < 5; i++) {
firstRecycleDatas.add(new FirstRecycleData(R.drawable.weather_18, "周" + i, "晴天" + i));
}firstAdapter = new FirstRecycleAdapter(firstRecycleDatas);
//第二個子recycleView的適配器
ArrayList<SecondRecycleData> secondRecycleDatas = new ArrayList<>();
secondRecycleDatas.add(new SecondRecycleData(30, 50,"優"));
secondAdapter = new SecondRecycleAdapter(secondRecycleDatas);
//第三個
ArrayList<ThridRecycleData> thridRecycleDatas = new ArrayList<>();
thridRecycleDatas.add(new ThridRecycleData(R.drawable.fengxiang, "風向", "", "風力", "東北風", "", "3級"));
thridRecycleDatas.add(new ThridRecycleData(R.drawable.richu, "日出", "", "日落", "06:33", "", "17:26"));
thridRecycleDatas.add(new ThridRecycleData(R.drawable.shidu, "", "濕度", "", "", "84", ""));
thridRecycleAdapter = new ThridRecycleAdapter(thridRecycleDatas);
//第四個
ArrayList<FourRecycleData> fourRecycleDatas = new ArrayList<>();
fourRecycleDatas.add(new FourRecycleData(R.drawable.yundong, "運動指數", "較不適宜"));
fourRecycleDatas.add(new FourRecycleData(R.drawable.yundong, "運動指數", "較不適宜"));
fourRecycleDatas.add(new FourRecycleData(R.drawable.yundong, "運動指數", "較不適宜"));
fourRecycleDatas.add(new FourRecycleData(R.drawable.yundong, "運動指數", "較不適宜"));
fourRecycleDatas.add(new FourRecycleData(R.drawable.yundong, "運動指數", "較不適宜"));
fourRecycleDatas.add(new FourRecycleData(R.drawable.yundong, "運動指數", "較不適宜"));
fourRecycleDatas.add(new FourRecycleData(R.drawable.yundong, "運動指數", "較不適宜"));
fourRecycleAdapter = new FourRecycleAdapter(fourRecycleDatas);
//將子適配器放入ArrayList集合中
adapterArrayList.add(firstAdapter);
adapterArrayList.add(secondAdapter);
adapterArrayList.add(thridRecycleAdapter);
adapterArrayList.add(fourRecycleAdapter);
}
下面是RecycleViewUtil類,為rootRecycleView設置適配器
public class RecyclerViewUtil {
private RecyclerView rootRecycleView;
private Context context;
public RecyclerViewUtil(RecyclerView rootRecycleView, RecyclerView.Adapter adapter, Context context) {
this.context=context;
this.rootRecycleView = rootRecycleView;
setAdapter(adapter);
}
private void setAdapter(RecyclerView.Adapter adapter){
rootRecycleView.setAdapter(adapter);
LinearLayoutManager manager = new LinearLayoutManager(context);
manager.setOrientation(LinearLayoutManager.VERTICAL);
rootRecycleView.setLayoutManager(manager);
}
}
最后的實現效果可以看到實現的還不錯
[java] view plain copy
---------------------
作者:lzjqcc
來源:CSDN
原文:https://blog.csdn.net/lzjqcc/article/details/53192656
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!