私は検索していますが、いくつかの質問と答えを見つけましたが、どれも動作しません。Layout_behavior(別のアダプタの内側にあるアダプタを使用)
私はAppBarLayoutとツールバーでリストRecyclerViewためCoordinatorLayoutを使用しています。
私の目標:
あなたが最初のアプリケーションバーのツールバーの崩壊とRecyclerViewがスクロールし始めることにした後、ビューをロールするときideiaは、非常に簡単です。
マイ階層:
マイフラグメントRecyclerView(垂直)は、新しいレイアウトにアダプター-Aを有し、このアダプタはRecyclerView(水平)のための第二のアダプターBを呼び出します。
だから私はこのような構造体を持っている: (コードではなく、単にどのように機能するかを示すために)
Fragment AppBarLayout{..}
Fragment Recycler View (Vertical) {
Adapter-A Text;
Adapter-A Recycler View (Horizontal){
Adapter-B Img;
Adapter-B Text;
}
}
問題は何ですか:
私はRecyclerViewにクリックした場合( Vertical)またはAdapter-Im Imgは問題ありません。
しかし、アダプタBのコンテンツ(ImgとText)をクリックすると、両方のRecyclerビューがスクロールされますが、AppBarはスクロールされません。
は私が
アプリを使用します:layout_behavior = "@文字列/ appbar_scrolling_view_behavior"
recyclerList.setHasFixedSize(真)
recyclerListを私がやっている何
。 setNestedScrollingEnabled(true);
両方のリサイクルビュー。
アプリ:layout_scrollFlags = "スクロール| exitUntilCollapsed | enterAlways" 私はJavaコードでこれを作ってみるCollapsingToolbarLayout
で
:
recyclerList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// If AppBar is fully expanded, revert the scroll.
if (!shouldScroll) {
recyclerList.scrollToPosition(0);
//Here I should make the AppBar Scroll, but AppBarLayout.scrollTo(dx, dy) don't work.
}
}
});
mainHomeAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
shouldScroll = verticalOffset != 0;
}
});
マイコード:
mainHome。XML
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/main_home_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.AppBarLayout
android:id="@+id/main_home_app_bar_layout"
android:layout_width="match_parent"
android:layout_height="192dp"
android:background="@drawable/gradient_bg">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed|enterAlways">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="50dp"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
mainHome.java
@Override
protected void assignViews() {
mainHomeList = (RecyclerView) findViewById(R.id.main_home_list);
mainHomeAppBarLayout = (AppBarLayout) findViewById(R.id.main_home_app_bar_layout);
}
@Override
protected void prepareViews() {
mainHomeList.setHasFixedSize(true);
mainHomeList.setNestedScrollingEnabled(true);
linearLayoutManager = new LinearLayoutManager(getApplicationContext());
mainHomeList.setLayoutManager(linearLayoutManager);
initAdapterIfNecessary();
if (mainHomeList.getAdapter() == null)
mainHomeList.setAdapter(adapter);
}
adapter-A.java
public class MainHomeModulesAdapter extends RecyclerView.Adapter<MainHomeModulesAdapter.GroupViewHolder> {
private OnListItemClickedListener onListItemClickedListener = null;
private OnListItemClickedTwoListener onListItemClickedTwoListener = null;
private ArrayList<JSONMainModule> mainModules = new ArrayList<>();
@Override
public MainHomeModulesAdapter.GroupViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
View itemView = LayoutInflater.from(context).inflate(R.layout.a_main_home_module_item, parent, false);
return (new MainHomeModulesAdapter.GroupViewHolder(itemView));
}
@Override
public void onBindViewHolder(MainHomeModulesAdapter.GroupViewHolder holder, int position) {
//Place where put layout information
holder.mainHomeModuleList.setLayoutManager(new GridLayoutManager(context, Utils.calcGridSpaceCount(context, 2))); //For two elements
holder.mainHomeModuleList.setAdapter(holder.mainHomeContentAdapter);
holder.mainHomeContentAdapter.updateListContent(mainModules.get(position).getModuleContent(), mainModules.get(position).getModule());
}
@Override
public int getItemCount() {
return mainModules.size();
}
public void setOnListItemClickedListener(OnListItemClickedListener onListItemClickedListener) {
this.onListItemClickedListener = onListItemClickedListener;
}
public void setOnListItemClickedTwoListener(OnListItemClickedTwoListener onListItemClickedTwoListener){
this.onListItemClickedTwoListener = onListItemClickedTwoListener;
}
public void updateListContent(ArrayList<JSONMainModule> mainModules) {
this.mainModules = mainModules;
notifyDataSetChanged();
}
public JSONMainModule getListContent(int pos) {
return mainModules.get(pos);
}
class GroupViewHolder extends ParentViewHolder {
TextView mainHomeModuleText;
Button mainHomeModuleBtn;
RecyclerView mainHomeModuleList;
MainHomeContentAdapter mainHomeContentAdapter; //Adapter-B
private GroupViewHolder(View itemView) {
super(itemView);
mainHomeModuleText = (TextView) itemView.findViewById(R.id.main_home_module_title);
mainHomeModuleBtn = (Button) itemView.findViewById(R.id.main_home_module_btn);
mainHomeModuleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ATUtils.isDoubleClick()) return;
onListItemClickedListener.onClicked(getAdapterPosition());
}
});
//Child - Main Contents
mainHomeModuleList = (RecyclerView) itemView.findViewById(R.id.main_home_module_list);
mainHomeModuleList.setHasFixedSize(true);
mainHomeModuleList.setNestedScrollingEnabled(true);
mainHomeContentAdapter = new MainHomeContentAdapter();
mainHomeContentAdapter.setOnListItemClickedListener(new OnListItemClickedListener() {
@Override
public void onClicked(int pos) {
onListItemClickedTwoListener.onClicked(pos, getAdapterPosition());
}
});
}
}
}