あなたの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
に、あなたは、水平LinearLayoutManager
と、このネストされたRecyclerView
(これは、あなたがの一つ以上を希望その中に垂直親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
に水平スクロール動作を提供します - もちろん、あなたはRecyclerView
秒ごとに異なるLinearLayoutManager
Sを使用して周りに他の方法で動作するようにこれらを反転させることができます。
それはViewPager
のように振る舞うようにするには、あなたがあなたの質問に示唆したようにSnapHelper
を使用する必要があるだろう:
- は
match_parent
に入れ子にRecyclerView
のアダプタのリスト項目の幅を設定します。 (アイテムのXMLレイアウトでこれを行います)。
LinearSnapHelper
(サポートライブラリ24)を初期設定します。1)このように:
SnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(viewHolder.recyclerView);
これは、あなたのユーザーは一度に一つの項目を参照し、個々の水平方向のビューをページにユーザーを許可することができます動作を提供します。
はい、通常、ScrollViewやViewPagerなどのスクロール可能なコンテナには特殊な処理が必要です。通常、処理中に応じて親や子にタッチイベントを委任します。これは非常に奇妙な実装であり、あなたが考えているユーザビリティが効率的かつ/または可能であるかどうかはわかりませんが、始めるための手がかりがあります。 – Chisko
そして、その手がかりは何ですか? – IKIKN2
あなたがしたいことを想像するのはかなり難しいです。これはこれに似ていますか:https://stackoverflow.com/q/47514072/878126? –