0

私は検索していますが、いくつかの質問と答えを見つけましたが、どれも動作しません。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()); 
      } 
     }); 

    } 

} 
} 

答えて

0

解決策が見つかりました。

親Vertical ListViewを作成するときは、setNestedScrollingEnabledをtrueに設定します。 子リストListViewを作成するときに、setNestedScrollingEnabledをfalseに設定します。

関連する問題