2017-04-26 43 views
-4

我有一個回收站視圖,其中包含一些項目在列表和單個項目中包含一個按鈕。我想執行一些按鈕上點擊我實施Recycler視圖適配器,但不想實現代碼按鈕點擊適配器上的一些操作我想在包含recylcer視圖推進的fragmenr中執行操作。我如何做到這一點如何在Android的回收站查看click listener?

代碼適配器

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

有百萬資源已經對此。如果您有關於實施的具體問題,請創建該問題。 – 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
在這些情況下

必須使用監聽器或回調並通過構造函數發送到您的回收觀點適配器。

首先創建一個新的接口用作回調。然後在片段中實現該接口,然後將您的片段(this)作爲偵聽器發送到您的適配器。那麼您可以從您的回收商視圖實例中調用該操作。

0

從這Reference,我已經在我的activity類的回收查看項目中實施,不在fragment

  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. ,裏面fragmentactivity類,你必須設置你的回收視圖工作之外的活動:

    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"); 
        } 
    }));