2016-11-27 4 views
-2

私は2種類のホルダータイプ(タイトルとアイテム)を持つRecyclerViewを使用して、アクティビティーのコンテンツを表示しています。タイトルごとのアイテム数は未定義です。 ちょうどこのように:RecyclerView:さまざまなアイテムに対する1つのOnClickListener?

Title 
-Item 
-Item 

Title 
-Item 

Title 
-Item 
-Item 
-Item 

私はヒントを探しています。どのようにしてOnClickListenerを各グループ(Title + Items)に設定すれば、「OnClick gray wave effect」が選択されたグループ全体を中断することなくブラウズできますか?

答えて

1

これを達成するには、グループ全体を1行(タイトル+ n項目)に入れ、プログラムでビューを処理する必要があると思います。クリックすると親のレイアウトandroid:background="?android:attr/selectableItemBackground"にリップル効果を与えることができます(onClickListenerまたは少なくともandroid:clickable="true"に設定してください)。

で何ができ、各タイトルのビュー内、あなたはNestedScrollViewRecyclerViewであなたの項目を追加し、recyclerView.setNestedScrollingEnabled(false)を使用してスクロールを無効にし、それはあなたに同じ結果を与えることができます。

+0

はい、それはもう見解をリサイクルしませんこれを行うことを実現します。 : – Denis

+0

True。グループ全体のビューはリサイクルされますが、タイトルの下の各アイテムは表示されません。グループ内に多くのアイテムがない場合は、これを使用できます – MohanadMohie

+0

私は複合ビューをたくさん持っています...: (Btw、あなたの助けをありがとう;) – Denis

-1

あなたは、各項目にOnClickListenerをしたいかのLinearLayoutに入れ、それにあなたがrecycleviewアダプタを示し、アダプタ

public interface OnLevelClick { 

void onTitleClick(int pos); 
void onItem(int pos); 
} 
    OnLevelClick onLevelClick; 
    public LevelAdapters(Activity activity, ArrayList<Items> 
    arrayListItems, OnLevelClick onLevelClick) { 
    this.arrayListItems = arrayListItems; 
    this.onLevelClick = onLevelClick; 
    this.activity =activity; 

} 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int 
    position) { 
     holder.tvTitle.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
      onLevelClick.onTitleClick(position); 

      } 
      //// or 
       holder.linear.setOnClickListener(new 
      View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
      onLevelClick.onTitleClick(position); 

      } 

でそれを使用するインターフェイスを作成し、画面でそれを実装する必要がIDを与える場合活動に

 Activity implements OnLevelClick{ 
    levelAdapter = new   
    LevelAdapters(getActivity(),savedLevelList,this); 
    reLevel.setAdapter(levelAdapter); 
      @Override 
    public void onNumClick(int pos) { 


    Log.d("Title",arraylist.get(po0s).getTitle()); 

    } 

}

関連する問題