0

私は、その中にタブレイアウトを作成するアクティビティを持っています。レイアウトには2つの部分が含まれています。最初のフラグメントにはリサイクラービューがあります。リサイクラビューの各カードには、チェックボックスと文字列があります。Recycler View onClick

チェックボックスをクリックすると、このカードの文字列をアクティビティにあるリストに送信したいので、2番目のタブフラグメントに入力することができます。

最初のフラグメントカードには、オブジェクトに保存されたブール値を真に設定するオンクリックがあります。私はクリックされたときにこのオブジェクトをつかんで、アクティビティリストに送信する方法を理解しようとしています。

Activity- 
public class MainActivity extends AppCompatActivity { 
public static List toSendList = new ArrayList(); 
...more code 
} 


Recycler Adapter- 
//initialize variables... 
CheckBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (CheckBox.isChecked()) { 
       //MainActivity.toSendList.add(Obj); 
       obj.setIsChecked(true); 
      } 
     } 
    }); 
... more code 

答えて

1

アクティビティで使用するリスナーを実装できます。例:

クリックリスナーのインターフェイスを作成します。

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.PhotoHolder> { 
    // ... all the code 

    public interface RecyclerViewOnClickListener(/* same arguments as above */); 

} 

あなたのビューホルダーに。

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public ViewHolder(View v) { 
     super(v);   
     // ... do all the initialization 
     v.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     mOnClickListener(int position /* or whatever argument you like */) 
    } 
} 

ご使用のでは、クリックのリスナーを保存します。だから、アダプターは、より多くのコードで終わるでしょう:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.PhotoHolder> { 
    // ... all the code 

    public interface RecyclerViewOnClickListener(/* same arguments as above */); 

    public RecyclerAdapter(RecyclerViewOnClickListener onClickListener) { 
     mOnClickListener = onClickListener; 
    } 

} 

だから、最終的には、あなたの活動にあなただけのRecyclerViewOnClickListenerをインスタンス化し、アダプタの引数として渡します。

+0

コメントありがとうございます!私は、私たちがmOnClickListenerを呼び出しているのを見ているビューホルダーについて、簡単な質問があります。これはアダプターと同じ変数ですか?リサイクラー・アダプター・コンストラクターからの引き数がこのリスナーを初期化していませんか? – paul590

+1

チェックボックスのリスナーにコールを追加すると、これを簡素化できます。しかし、はいそれはアダプタから同じです。 –

+0

これは完璧な解決策でした。 – paul590

2

あなたはEventBusを試してみて、あなたがそれを好きかどうかを確認することがあります。これを使用して、 「イベント」を定義します。これは、アクティビティ(またはそれをラップするイベント)に渡すオブジェクトにすることもできます。受信活動では、あなたのサブプライヤーを追加してください。その後、

EventBus.getDefault().post(new CustomEvent()); 

を呼び出すことにより、イベント/オブジェクトを渡すとSubcriberがまだ装着されている任意の場所がイベントを受信します。

+0

は、私はそれがRXライブラリを使用すると仮定しています。このライブラリを使用するために先端をありがとうございましたか! – paul590

1

はこれを試してみてください。

Activity- 
public class MainActivity extends AppCompatActivity { 
public static List toSendList = new ArrayList(); 
...more code 
    public setPassData(String string) 
    { 
    //do something with this string 
    } 
} 

Fragment A/B 
public void setPassData(String string) 
{ 
    ((ActivityName)getActivity()).setPassData(string); 
} 


Recycler Adapter- 
//initialize variables... 
CheckBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (CheckBox.isChecked()) { 
       //MainActivity.toSendList.add(Obj); 
       obj.setIsChecked(true); 
       ((FragmentName)mContext).setPassData(SomeStringToPass); 
      } 
     } 
    }); 
関連する問題