從描述中,這是很難說究竟應該發生的方向滾動的行爲,但下面應該給你做什麼的想法:
可以嵌套內的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? –