2017-04-26 8 views
-4

リサイクラービューにはリスト内のいくつかのアイテムが含まれており、個々のアイテムにはボタンが含まれています。私はボタンをクリックして特定のアイテムをクリックして実行したいリサイクラービューアダプターを実装していますが、アダプターのボタンをクリックしてコードを実装したくないです。私は、recylcerビューのimpelementationを含むfragmenrでアクションを実行します。私はリサイクルビュー用のアダプタandroidのrecyclerviewでクリックリスナーを作る方法は?

public class ViewHolder extends RecyclerView.ViewHolder { 
    TextView m_premiumText, m_getDealText; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     m_premiumText = (TextView) itemView.findViewById(R.id.tv_premiun_deals); 
     m_getDealText = (TextView) itemView.findViewById(R.id.tv_get_deals); 

     m_getDealText.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(mContext,"clicked"+getAdapterPosition(),Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
} 

コードリスナーまたはコールバックを使用して、コンストラクタを通して、あなたのリサイクル・ビュー・アダプタに送信しなければならないこれらのケースで

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    mContext = getActivity(); 
    main = inflater.inflate(R.layout.reward_premium_deals, container, false); 
    findViewById(); 
    initControls(); 
    return main; 
} 


public void findViewById() { 
    m_premiumList = (RecyclerView) main.findViewById(R.id.premium_list); 
    m_layoutManager = new LinearLayoutManager(mContext); 
    m_premiumList.setLayoutManager(m_layoutManager); 

} 

public void initControls() { 
    premiumNames = getResources().getStringArray(R.array.premium_deals_title); 
    m_premiumDealsAdapter = new CPremiumDealsAdapter(mContext, premiumNames); 
    m_premiumList.setAdapter(m_premiumDealsAdapter); 

    /*here i want button click action*/ 


} 
+0

すでにこのについての百万個のリソースがあります私の答えからカスタムinterface..check使ってこれを実装することができます。実装に関する特定の質問がある場合は、作成してください。 – Nabin

+0

http://stackoverflow.com/questions/24885223/why-doesnt-recyclerview-have-onitemclicklistener-and-how-recyclerview-is-dif – Nabin

+0

http://stackoverflow.com/questions/24471109/recyclerview-onclick – Nabin

答えて

1

のためにその

コードをどのように行うのですか。

最初に、コールバックとして使用する新しいインターフェイスを作成します。あなたのフラグメントにそのインターフェースを実装して、あなたのアダプターにリスナーとしてフラグメント(これ)を送ります。リサイクラビューインスタンスからそのアクションを呼び出すことができます。

0

このReferenceから、fragmentにないactivityクラスのリサイクラビュー項目で実装しました。

  1. インターフェイスクラス:

    public interface RecyclerViewClickListener { 
        void onClick(View view, int position); 
        void onLongClick(View view, int position); 
    } 
    
  2. RecyclerViewTouchListenerクラス:今

    public class RecyclerViewTouchListener implements RecyclerView.OnItemTouchListener { 
    private GestureDetector gestureDetector; 
    private RecyclerViewClickListener recyclerViewClickListener; 
    
    public RecyclerViewTouchListener(Context context, final RecyclerView recyclerView, final RecyclerViewClickListener recyclerViewClickListener1) { 
        recyclerViewClickListener = recyclerViewClickListener1; 
        gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
         @Override 
         public boolean onSingleTapUp(MotionEvent e) { 
          return true; 
         } 
    
         @Override 
         public void onLongPress(MotionEvent e) { 
          View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
          if (child != null && recyclerViewClickListener1 != null){ 
           recyclerViewClickListener.onLongClick(child, recyclerView.getChildLayoutPosition(child)); 
          } 
         } 
        }); 
    } 
    
    @Override 
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
        View child = rv.findChildViewUnder(e.getX(), e.getY()); 
        if (child != null && recyclerViewClickListener != null && gestureDetector.onTouchEvent(e)){ 
         recyclerViewClickListener.onClick(child, rv.getChildLayoutPosition(child)); 
        } 
        return false; 
    } 
    
    @Override 
    public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
    
    } 
    
    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 
    
    } 
    } 
    
  3. 、セットアップに使用すると、ビューactivtiesをリサイクルしていfragmentまたはactivityクラス内部:

    recyclerView.setAdapter(your_adapter_class_object); 
    recyclerView.addOnItemTouchListener(new RecyclerViewTouchListener(this, recyclerView, new RecyclerViewClickListener() { 
        @Override 
        public void onClick(View view, int position) { 
         Loge("Item","Click"); 
        } 
    
        @Override 
        public void onLongClick(View view, int position) { 
         Loge("Item","Long Click"); 
        } 
    })); 
    
関連する問題