从描述中,这是很难说究竟应该发生的方向滚动的行为,但下面应该给你做什么的想法:
可以嵌套内的RecyclerView
一个RecyclerView
作为项目。
在适配器的onCreateViewHolder
方法中,根据所提供的viewType
返回替代方案ViewHolder
。为简洁起见,我已将其作为switch
声明完成。
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case REGULAR_ITEM:
return new RegularItemViewHolder(getRowView(parent, R.layout.list_item_regular);
case NESTED_LIST_TYPE:
return new NestedRecyclerViewHolder(getRowView(parent, R.layout.list_item_nested_recycler);
...
}
protected View getRowView(ViewGroup parent, @LayoutRes final int layoutRes) {
return layoutInflater.inflate(layoutRes, parent, false);
}
ViewHolder
public class NestedRecyclerViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.my_nested_recyclerview)
public RecyclerView recyclerView;
public NestedRecyclerViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
如果是onBindViewHolder
你可以设置这个嵌套RecyclerView
与水平LinearLayoutManager
(这是假设你有一个垂直父RecyclerView
您希望的一个或多个在其内行是水平的RecyclerView
)。
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// find the item type based on the position
if(rowType == NESTED_LIST_TYPE) {
NestedRecyclerViewHolder viewHolder = (NestedRecyclerViewHolder)holder;
viewHolder.recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
viewHolder.recyclerView.setAdapter(new MyAdapter());
// continue to set up the nested `RecyclerView` as you would a regular one
}
...
这将提供一个垂直RecyclerView
水平滚动行为 - 当然,你可以翻转这些通过使用不同的LinearLayoutManager
S代表每个RecyclerView
S在其他的方式来解决。
为了使它像一个ViewPager
,你需要使用SnapHelper
,你提到你的问题:
- 设置列表项的宽度在嵌套
RecyclerView
的适配器match_parent
(在项目的XML布局中执行此操作)。
初始化LinearSnapHelper
(支持库24。1)所示:
SnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(viewHolder.recyclerView);
这会给你的行为,其中用户只能看到一个项目的时间和允许通过单独的水平视图的用户页面。
来源
2016-11-21 11:24:42
HBG
是的,通常像ScrollView和ViewPager这样的嵌套可滚动容器需要特殊处理,通常根据你在做什么将触摸事件委托给父母和孩子。这是一个相当奇怪的实现,我不确定你所想的可用性是否有效和/或可能,但是你有一个线索可以开始。 – Chisko
那是什么线索? – IKIKN2
很难想象你想要做什么。是否与此类似:https://stackoverflow.com/q/47514072/878126? –