gpt4 book ai didi

Android 双向 View - 垂直 Recyclerview 内的水平 Recyclerview

转载 作者:搜寻专家 更新时间:2023-11-01 09:28:22 25 4
gpt4 key购买 nike

我想创建一个动态加载 View ,其中包含垂直 recyclerview 内的水平 recyclerview,而垂直 recyclerview 应该位于 Scrollview 内,因为主视图包含更多 View 组件。所以我的动态层次结构如下:-

 Scrollview [
| Viewpager --
| AdView --
| Vertical Items - Recyclerview {
1) [Horizontal Recyclerview {1.1, 1.2, 1.3} [Lazy Loading of Items]]
2) [Horizontal Recyclerview {2.1, 2.2, 2.3} [Lazy Loading of Items]]
3) [Horizontal Recyclerview {3.1, 3.2, 3.3} [Lazy Loading of Items]]
4) [Horizontal Recyclerview {4.1, 4.2, 4.3} [Lazy Loading of Items]]
.
.
.
[Lazy Loading of Items in Vertical Direction also]
}
| Some Another View --
]

有什么最好的方法可以在 android 中实现这种类型的 View 。那么水平和垂直方向都可以实现item的动态加载?android 中有可用的库吗?请给我一些很好的例子。

最佳答案

最好的方法是使用 RendererRecyclerViewAdapter

第 1 步:ViewModel 接口(interface)添加到您的简单项目

public class SimpleItem implements ViewModel {
/* your getters */
}

第 2 步:为您的简单项目创建 ViewBinder

private ViewRenderer getSimpleViewBinder() {
return new ViewBinder<>(
R.layout.simple_item, /* your item layout */
SimpleItem.class, /* your model class */
(model, finder, payloads) -> {
/* your binding */
finder.setText(R.id.textView, model.getText());
});
}

第 3 步:扩展 DefaultCompositeViewModel 并添加水平项目的唯一 ID

public class HorizontalViewModel extends DefaultCompositeViewModel {

private int mID;

public HorizontalViewModel(int ID, List<? extends ViewModel> items) {
super(items);
mID = ID;
}

public int getID() {
return mID;
}
}

它是您的水平项目,其中包含所有简单项目。

第四步:创建Horizo​​ntalViewBinder

public class HorizontalViewBinder extends CompositeViewBinder<HorizontalViewModel> {

public HorizontalViewBinder(int layoutID,
int recyclerViewID,
Class<HorizontalViewModel> type) {
super(layoutID, recyclerViewID, type);
}

@Override
public void bindView(HorizontalViewModel model, CompositeViewHolder holder) {
super.bindView(model, holder);
holder.getRecyclerView().addOnScrollListener(new EndlessScrollListener() {
@Override
public void onLoadMore(int page, int totalItemsCount) {
holder.getAdapter().showLoadMore();
/* sendLoadMoreRequest(model.getID()); */
}
});
}

@NonNull
@Override
public CompositeViewHolder createViewHolder(ViewGroup parent) {
final CompositeViewHolder viewHolder = super.createViewHolder(parent);
viewHolder.getAdapter().registerRenderer(new LoadMoreViewBinder(R.layout.load_more));
/* don't forget to create load more layout */
return viewHolder;
}
}

第 5 步:为您的 Horizo​​ntalViewBinder 创建一个 getter

private ViewRenderer getHorizontalViewBinder() {
return new HorizontalViewBinder<>(
R.layout.horizontal_layout, /* your horizontal layout that contains RecyclerView */
R.id.recycler_view, /* an ID of RecyclerView */
HorizontalViewModel.class /* your created class, see Step 3 */
);
}

第 6 步:在您的 Fragment/Activity 中初始化主 RendererRecyclerViewAdapter

RendererRecyclerViewAdapter mRecyclerViewAdapter = new RendererRecyclerViewAdapter();
mRecyclerViewAdapter.registerRenderer(new Horizontal().registerRenderer(getHorizontalViewBinder().registerRenderer(getSimpleViewBinder())); /* register HorizontalViewBinder and SimpleViewBinder */
mRecyclerViewAdapter.setItems(getYourList());

第 7 步:将 LoadMoreListener 添加到主 RecyclerView

mRecyclerView.addOnScrollListener(new EndlessScrollListener() {
@Override
public void onLoadMore(int page, int totalItemsCount) {
mRecyclerViewAdapter.showLoadMore();
/* send request to a server */
}
});

第 8 步:为您的其他项目创建特殊的 ViewBinder:AdViewBinder、SomeAnotherViewBinder 并将它们注册到您的适配器中。请参阅第 1 步和第 2 步。


仅供引用:EndlessScrollListener - 这是您对 LoadMoreListener 的实现

尽情享受吧! :)

如果您需要更多详细信息,请参阅维基页面:简单项目、复合项目、加载更多指标。

关于Android 双向 View - 垂直 Recyclerview 内的水平 Recyclerview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49345312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com