2016-08-17 76 views
0

我正在關注RecyclerView上的Big Nerd Ranch tutorial on RecyclerView教程。我改變了一些東西在那裏。我面臨的問題是,當我點擊行時,該特定被突出顯示,但我不能看到其他'未選中的行'。在RecyclerView中突出顯示CardView行

行的選擇之前: enter image description here

enter image description here

的選擇後,我實現在支架點擊次數。 下面是代碼:

public class CustomRecyclerViewHolder extends SwappingHolder implements View.OnClickListener, View.OnLongClickListener { 

     private TextView mMsg1, mMsg2; 
     //private ImageView mAvatarView; 
     private CheckBox mCheckBox; 
     private LinearLayout checkboxHolder; 
     private ImageView mDeleteRow; 
     private CardView cardView; 
     private Category category; 
     private CustomRecyclerViewHolder holder; 

     public CustomRecyclerViewHolder(View itemView) { 
      super(itemView, myFragment.mMultiSelector); 
      mMsg1 = (TextView) itemView.findViewById(R.id.text_view1); 
      mMsg2 = (TextView) itemView.findViewById(R.id.text_view2); 
      //mAvatarView = (ImageView)itemView.findViewById(R.id.avatar_holder); 
      mCheckBox = (CheckBox) itemView.findViewById(R.id.checkbox); 
      checkboxHolder = (LinearLayout) itemView.findViewById(R.id.checkbox_holder); 
      mDeleteRow = (ImageView) itemView.findViewById(R.id.delete_row); 
      cardView = (CardView) itemView.findViewById(R.id.card_holder); 
      itemView.setOnClickListener(this); 
      itemView.setLongClickable(true); 
      itemView.setOnLongClickListener(this); 
     } 

     public void bindCategory(Category category) { 
      this.category = category; 
      mMsg1.setText(category.getName()); 
      mMsg2.setText(category.getDescriptionName()); 
      if (category.getCompleted() == 1) { 
       mCheckBox.setChecked(true); 
       mCheckBox.setVisibility(View.VISIBLE); 
      } else 
       mCheckBox.setChecked(true); 
     } 

     @Override 
     public void onClick(View v) { 

      if (category == null) { 
       return; 
      } 
      checkboxHolder.setVisibility(View.VISIBLE); 
      mCheckBox.setChecked(isChecked); 
      if (!myFragment.mMultiSelector.tapSelection(this)) { 
       //selectCrime(mCrime); 
      } 

     } 

     @Override 
     public boolean onLongClick(View v) { 

      ((AppCompatActivity) mContext).startSupportActionMode(myFragment.mDeleteMode); 
      myFragment.mMultiSelector.setSelected(this, true); 
      return true; 
     } 
    } 

然後在我的片段我這樣做:

public class CustomMultiSelectorCallback extends ModalMultiSelectorCallback { 

     public CustomMultiSelectorCallback(MultiSelector multiSelector) { 
      super(multiSelector); 
     } 

     @Override 
     public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { 
      super.onCreateActionMode(actionMode, menu); 
      actionMode.getMenuInflater().inflate(R.menu.list_item_delete, menu); 
      return true; 
     } 

     @Override 
     public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { 

      switch (menuItem.getItemId()) { 
       case R.id.menu_item_delete: 
       { 

        for (int i = categoriesArrayList.size(); i >= 0; i--) { 
         if (mMultiSelector.isSelected(i, 0)) { 
          categoryDatabase = new CategoryDatabase(context); 
          Category category = prescriptionsArrayList.get(i); 
          categoryDatabase.deleteCategory(category); 
          categoryRecyclerView.getAdapter().notifyItemRemoved(i); 
         } 
        } 


        categoriesArrayList.clear(); 
        mMultiSelector.clearSelections(); 
        actionMode.finish(); 
        return true; 

       } 
      } 
      return false; 
     } 
    } 
+0

可能重複:http://stackoverflow.com/questions/38829808/recyclerview-on-click-highlight-and-make-others不突出顯示/ 38831493#38831493 – JCDecary

+0

不,我不這麼認爲。這是特定於上述教程中使用的庫。 –

回答

0

噸左右的研究後,我終於找到了答案。如果您使用CardView + Big Nerd Ranch MultiSelector。點擊CardView時,只顯示特定的卡片,而不是RecyclerView中的其餘卡片。這是因爲SwappingHolder通過交換頂層View的可繪製工作。但CardView使用它自己的drawable,因此如果將它用作頂級View,它將不起作用。

CardView使用自己的背景。 SwappingHolder需要能夠替換該背景來完成其工作。

一種選擇是自己實現SelectableHolder接口,然後選擇要顯示選定項目的方式。

另一種選擇是我們可以使CardLayout成爲一個FrameLayout的孩子。事情是這樣的: <FrameLayout ... > <CardView ... > </CardView> </FrameLayout>

我總結什麼是說基本上here

0

我請你檢查出庫我最近寫了一個實現多重選擇(拖動&下降和刷卡一樣,如果你最終需要他們)。在圖書館的一個樣本上,還通過在ViewHolder上放置一個可繪圖來實現選擇。但是,使用的方法是在ActionMode啓動時激活drawable,捕獲此drawable上的click事件以切換選擇狀態,然後在ActionMode退出時將drawable可見性設置爲GONE。

也許通過檢查源代碼,你可以找到自己感興趣的東西:的https://github.com/MikiLoz92/FancyAdapters