2016-11-30 64 views
1

我有一个recyclerview的所有行箱子,我需要显示检查点击操作栏菜单,而像这里显示show check boxesAndroid的显示和隐藏检查recyclerview

像这样检查所有并隐藏所有 hide/selectall

我怎样才能达到这样的?我试着打从我的活动适配器方法和复选框可见的设置可见性,然后调用notifyDataSetChanged()但它只有一个行显示复选框。这里是我的适配器代码

public class CartItemListAdapter extends RecyclerView.Adapter<CartItemListAdapter.MyViewHolder> { 

    private List<CartItemDetail> cartItemDetailList; 
    private Context context; 
    private CheckBox checkbox; 



    public CartItemListAdapter (List<CartItemDetail> cartItemDetailList){ 
     this.cartItemDetailList=cartItemDetailList; 
    } 


    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     private TextView cartProductName, totalValue,leftValue; 
     private ImageView cartProductImage, incrementButton,decrementButton; 
     private EditText coinValue; 




     public MyViewHolder(View view) { 
      super(view); 
      cartProductImage=(ImageView)view.findViewById(R.id.cart_product_image); 
      incrementButton=(ImageView)view.findViewById(R.id.cartIncrementImg); 
      decrementButton=(ImageView)view.findViewById(R.id.cartDecrementImg); 
      coinValue=(EditText)view.findViewById(R.id.cartBetCoinValue); 
      cartProductName=(TextView)view.findViewById(R.id.cart_product_name); 
      totalValue=(TextView)view.findViewById(R.id.cart_ProductTotal_qty); 
      leftValue=(TextView)view.findViewById(R.id.cart_ProductRemaining_qty); 
      checkbox=(CheckBox)view.findViewById(R.id.cart_item_checkbox); 
     } 

     @Override 
     public void onClick(View v) { 

     } 

    } 



    @Override 
    public CartItemListAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     context=parent.getContext(); 

     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.cart_item_row, parent, false); 

     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       callProductEventDetails(); 
      } 
     }); 


     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(CartItemListAdapter.MyViewHolder holder, int position) { 
     CartItemDetail cartItemDetail=cartItemDetailList.get(position); 
     holder.cartProductName.setText(cartItemDetail.getCartProductName()); 
     holder.leftValue.setText(Html.fromHtml("<pre>" + "Left:" + "</pre>" + "<font color=\"#EF4836\">" + cartItemDetail.getProductLeftQty() + "</font>")); 
     holder.totalValue.setText("Total:"+cartItemDetail.getProductTotalQty()); 
     holder.coinValue.setText(cartItemDetail.getAddedCoins()); 


     Glide.with(context) 
       .load(cartItemDetail.getCartProductImageUrl()) 
       .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
       .fitCenter() 
       .into(holder.cartProductImage); 
} 

    @Override 
    public int getItemCount() { 
     return cartItemDetailList.size(); 
    } 

    private void callProductEventDetails(){ 
     Intent intent= new Intent(context, ProductEventDetailActivity.class); 
     intent.putExtra("eventStatus","inProgress"); 
     context.startActivity(intent); 
    } 

    public void displayCheckBox(){ 
checkbox.setVisibility(View.VISIBLE); 
     notifyDataSetChanged(); 
    } 
} 

XML的项目排..

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_marginBottom="1dp" 
    android:elevation="0dp" 
    app:cardElevation="0dp"> 
<LinearLayout 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:descendantFocusability="beforeDescendants" 
    android:focusableInTouchMode="true"> 
    <CheckBox 
     android:visibility="gone" 
     android:padding="-25dp" 
     android:gravity="center" 
     android:id="@+id/cart_item_checkbox" 
     android:layout_gravity="center_vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:scaleX="0.40" 
     android:scaleY="0.40" 
     android:button="@drawable/cart_checkbox_selector"/> 
    <ImageView 
     android:layout_marginLeft="10dp" 
     android:id="@+id/cart_product_image" 
     android:layout_gravity="center_vertical" 
     android:layout_width="80dp" 
     android:layout_height="80dp" /> 
    <RelativeLayout 
     android:padding="10dp" 
     android:layout_marginLeft="10dp" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content"> 
    <TextView 
     android:id="@+id/cart_product_name" 
     android:layout_width="wrap_content" 
     android:maxLines="2" 
     android:ellipsize="end" 
     android:layout_height="wrap_content" 
     android:textSize="16sp" 
     android:textColor="#1d1d1d" 
     android:text="iPhone7 128G xxxxxxxxxxx xxx"/> 

     <TextView 
      android:id="@+id/cart_ProductTotal_qty" 
      android:layout_marginTop="15dp" 
      android:layout_below="@+id/cart_product_name" 
      android:layout_alignParentLeft="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Total:750"/> 

     <TextView 
      android:layout_alignParentRight="true" 
      android:layout_alignBaseline="@+id/cart_ProductTotal_qty" 
      android:id="@+id/cart_ProductRemaining_qty" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="15dp" 
      android:text="Left:95"/> 
     <LinearLayout 
      android:layout_below="@+id/cart_ProductTotal_qty" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="10dp" 
      android:orientation="horizontal" 
      android:background="@drawable/counter_stroke_border"> 
      <ImageView 
       android:id="@+id/cartDecrementImg" 
       android:layout_margin="10dp" 
       android:layout_gravity="center_vertical" 
       android:layout_width="15dp" 
       android:layout_height="15dp" 
       android:background="@drawable/minus_decrement"/> 
      <View 
       android:layout_width="0.6dp" 
       android:layout_height="match_parent" 
       android:background="#8d8d8d"></View> 
      <EditText 
       android:id="@+id/cartBetCoinValue" 
       android:layout_width="70dp" 
       android:layout_gravity="center_vertical" 
       android:focusableInTouchMode="true" 
       android:layout_height="wrap_content" 
       android:textColor="#EF4836" 
       android:ellipsize="start" 
       android:gravity="center_horizontal" 
       android:text="1" 
       android:inputType="number" 
       android:singleLine="true" 
       android:background="@android:color/transparent"/> 
      <View 
       android:layout_width="0.6dp" 
       android:layout_height="match_parent" 
       android:background="#8d8d8d"></View> 
      <ImageView 
       android:id="@+id/cartIncrementImg" 
       android:layout_margin="10dp" 
       android:layout_gravity="center_vertical" 
       android:layout_width="15dp" 
       android:layout_height="15dp" 
       android:background="@drawable/plus_increment"/> 
     </LinearLayout> 
    </RelativeLayout> 

</LinearLayout> 
</android.support.v7.widget.CardView> 
+1

访问您所有的复选框,那么什么是问题? – Piyush

+0

@Piyush问题是我想显示在每一行上的复选框,但目前当我设置从适配器方法(从活动调用)复选框的可见性复选框只在一个随机行中可见..但我希望它是在所有行上都可见 – Moulesh

+0

只需使用_getCount()_方法从适配器访问所有复选框即可。 – Piyush

回答

2

修改代码如下:

@Override 
    public void onBindViewHolder(...) { 
    ... 
    ... 
    if(//condition for visibility) { 
     checkbox.setVisibility(View.VISIBLE); 
    } else { 
     checkbox.setVisibility(View.GONE); 
    } 
} 

活动内部修改数据集即cartItemDetailList 的。 d致电yourAdapter.notifyDataSetChanged();

+0

他如何确定哪个复选框设置为可见性? –

+0

这取决于他的要求(业务逻辑)。因此,我没有提到任何具体的可见性条件。 –

0

您可以在您的CartItemDetail型号中添加bolean isSelected。并且当你想根据你的场景显示隐藏复选框设置可见性为VISIBLEGone

你必须把支票在适配器像cartItemDetail.isSelected()设置为true然后显示你的复选框,当它被设置为false然后设置知名度水涨船高。

根据您的活动,您可以将setSelected()改为truefalse

将此检查放入适配器中。

  if(cartItemDetail.isSelected){ 
      yourCheckBox.setVisibility(View.VISIBLE); 
     }else{ 
      yourCheckBox.setVisibility(View.GONE); 
     } 
0

只需通过

for (int i = 0; i < recyclerView.getChildCount(); i++) { 
View view = recyclerView.getChildAt(i); 
if(view==null){ 
    return; 
} 
CheckBox checkbox=(CheckBox)view.findViewById(R.id.cart_item_checkbox); 
checkbox.setVisibility(View.VISIBLE)// same for hide use View.GONE 
}