2016-11-30 5 views
1

ich habe eine recyclerview und ich brauche Felder anzuzeigen überprüfen Klicken auf Menüaktionsleiste wie hier gezeigt show check boxesAndroid Ein- und Ausblenden Kontrollkästchen auf allen Reihen von recyclerview

und wie dies alles zu überprüfen und verstecken alle hide/selectall

Wie kann ich so etwas erreichen ?? Ich versuchte, ein Adapter-Methode aus meiner Tätigkeit und setzen visiblity von Kontrollkästchen, um sichtbar und notifyDataSetChanged() dann rufen aufrufen, aber es zeigt Checkbox in einer Zeile nur .. hier ist mein Adapter Code

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 für Artikelzeile ..

<?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

Also, was ist das Problem? – Piyush

+0

@ Piyush Problem ist, ich möchte das Kontrollkästchen für jede Zeile anzeigen, aber derzeit, wenn ich die Sichtbarkeit des Kontrollkästchens von einem Adapter-Methode (von Aktivität genannt) Kontrollkästchen ist nur in einer zufälligen Zeile sichtbar .. aber ich will es zu sein in allen Zeilen sichtbar – Moulesh

+0

Greifen Sie einfach über die _getCount() _ Methode auf alle Kontrollkästchen des Adapters zu. – Piyush

Antwort

2

Ihr Code wie folgt ändern:

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

Innerhalb der Aktivität ändern Sie den Datensatz dh cartItemDetailList ein. d call yourAdapter.notifyDataSetChanged();

+0

Wie kann er bestimmen, welche Checkbox für die Sichtbarkeit gesetzt ist? –

+0

Das hängt von seiner Anforderung ab (Geschäftslogik). Daher habe ich keine spezifische Bedingung für die Sichtbarkeit erwähnt. –

0

Sie können bolean isSelected in Ihrem CartItemDetail Modell hinzufügen. Und wenn Sie das Kontrollkästchen ausblenden anzeigen möchten, setzen Sie die Sichtbarkeit gemäß Ihrem Szenario auf VISIBLE oder Gone.

Sie müssen einen Haken in Ihrem Adapter wie cartItemDetail.isSelected() wird auf true gesetzt dann zeigen Sie Ihre Checkbox und wenn es auf false gesetzt ist, dann setzen Sichtbarkeit auf gegangen.

Sie können setSelected() zu true oder false entsprechend Ihrer Veranstaltung.

Setzen Sie diesen Haken in Ihren Adapter.

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

einfach alle Ihre Kontrollkästchen Zugriff durch

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 
} 
Verwandte Themen