2015-10-30 10 views
8

recyclerViewに画像、タイトル、チェックボックスを設定しました。 私には2つの問題があります。recyclerviewからチェックボックスのチェックリストを取得します。android

  1. イメージビューまたはリサイクル業者アイテム全体をクリックしたときにチェックボックスを選択する方法。

  2. 私は、recyclerviewからすべてのチェックされたアイテムを取得することによって、次のアクティビティに進む必要があります。

マイレイアウト:

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="8dp"> 

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="match_parent" 
      android:layout_height="150dp" 
      android:layout_gravity="center_horizontal" 
      android:contentDescription="Interests" 
      android:scaleType="centerCrop" 
      android:src="@drawable/ic_yash_dp" /> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_gravity="bottom" 
      android:layout_margin="5dp" 
      android:layout_marginTop="24dp" 
      android:background="@drawable/rounded_corners" 
      android:gravity="bottom" 
      android:padding="5dp" 
      android:text="GYM" 
      android:textAlignment="center" 
      android:textColor="@color/white" /> 

     <CheckBox 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/checkBox" 
      android:layout_margin="2dp" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

    </RelativeLayout> 

マイアダプタ:

@Override 
public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
final InterestBean model = arrayList.get(position); 
final int pos = position; 

RecyclerViewHolder mainHolder = (RecyclerViewHolder) holder;// holder 

Bitmap image = BitmapFactory.decodeResource(context.getResources(), 
     model.getImage());// This will convert drawbale image into bitmap 

// setting title 
mainHolder.title.setText(model.getTitle()); 
mainHolder.imageview.setImageBitmap(image); 
mainHolder.checkBox.setChecked(arrayList.get(position).isSelected()); 
mainHolder.checkBox.setTag(arrayList.get(position)); 


mainHolder.checkBox.setOnClickListener(new View.OnClickListener()  { 
public void onClick(View v) { 
CheckBox cb = (CheckBox) v; 
InterestBean contact = (InterestBean) cb.getTag(); 

contact.setIsSelected(cb.isChecked()); 
arrayList.get(pos).setIsSelected(cb.isChecked()); 
selectedItems.add(pos); 
Toast.makeText(
v.getContext(), pos + cb.isChecked(), Toast.LENGTH_LONG).show(); 
} 
});} 

答えて

22

一つの簡単な解決策は、あなたがOnItemCheckListerを作成し、次のようにそれが似て実装することができることになります

public class MyAdapter extends RecyclerViewAdapter { 

    interface OnItemCheckListener { 
     void onItemCheck(Item item); 
     void onItemUncheck(Item item); 
    } 

    ... 

    @NonNull 
    private OnItemCheckListener onItemCheckListener; 

    public MyAdapter (List<Item> items, @NonNull OnItemCheckListener onItemCheckListener) { 
     this.items = items; 
     this.onItemClick = onItemCheckListener; 
    } 

    ... 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 
     if (holder instanceof MyViewHolder) { 
      final Item currentItem = items.get(position); 

      ... 

      ((MyViewHolder) holder).setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        ((MyViewHolder) holder).checkbox.setChecked(
          !((MyViewHolder) holder).checkbox.isChecked()); 
        if (((MyViewHolder) holder).checkbox.isChecked()) { 
         onItemClick.onItemCheck(currentItem); 
        } else { 
         onItemClick.onItemUncheck(currentItem); 
        } 
       } 
      }); 
     } 
    } 

    static class MyViewHolder extends RecyclerView.ViewHolder { 
     CheckBox checkbox; 
     View itemView; 

     ... 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      this.itemView = itemView; 
      checkbox = (CheckBox) itemView.findViewById(R.id.checkbox); 
      checkbox.setClickable(false); 
      ... 
     } 

     public void setOnClickListener(View.OnClickListener onClickListener) { 
      itemView.setOnClickListener(onClickListener); 
     } 
    } 
} 

は、その後の活動では、我々はこれを行うことができます:

private List<Item> currentSelectedItems = new ArrayList<>(); 

    ... 

    myAdapter = new MyAdapter(items, new MyAdapter.OnItemCheckListener() { 
      @Override 
      public void onItemCheck(Item item) { 
       currentSelectedItems.add(item); 
      } 

      @Override 
      public void onItemUncheck(Item item) { 
       currentSelectedItems.remove(item); 
      } 
     }); 

次に、 h currentSelectedItems

注:このソリューションはアイテム全体が押されたと仮定しているので、チェックボックスはクリックできないように設定されています。

+0

それは単に素晴らしいです、人々はこのソリューションを使用してください! –

0

1)あなたはmainHolder.imageview OnClickListenerを追加することができます
2)2段階:

  1. 追加InterestBeanモデルのブールn isChecked
  2. 次のアクティビティに進むと、すべてのInterestBeansを取得し、Checked InterestBeansをすべて取得して保存します。

コード:

mainHolder.imageview.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick (View v) 
     { 
      mainHolder.checkBox.setChecked(!mainHolder.checkBox.isChecked()); 
     } 
    } 
    ); 
+0

の2つのオーバーライドメソッドを追加します。 – Yashwanth

+0

は、私がコメントに書き込み – andrey7mel

+0

mainHolder.imageview.setOnClickListener(新View.OnClickListener(){@Override ます。public void onClickの(ビューV){// それはcheked設定方法 } ?}); – Yashwanth

2

Modelクラスを使用して、recyclerViewのチェック項目を取得できます。その他の参照:Android Recyclerview checkbox

モデル

public class Model { 

    private boolean isSelected; 
    private String animal; 

    public String getAnimal() { 
     return animal; 
    } 

    public void setAnimal(String animal) { 
     this.animal = animal; 
    } 

    public boolean getSelected() { 
     return isSelected; 
    } 

    public void setSelected(boolean selected) { 
     isSelected = selected; 
    } 
} 

アダプタ

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
    import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 


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

private LayoutInflater inflater; 
public static ArrayList<Model> imageModelArrayList; 
private Context ctx; 

public CustomAdapter(Context ctx, ArrayList<Model> imageModelArrayList) { 

    inflater = LayoutInflater.from(ctx); 
    this.imageModelArrayList = imageModelArrayList; 
    this.ctx = ctx; 
} 

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

    View view = inflater.inflate(R.layout.rv_item, parent, false); 
    MyViewHolder holder = new MyViewHolder(view); 

    return holder; 
} 

@Override 
public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) { 

    holder.checkBox.setText("Checkbox " + position); 
    holder.checkBox.setChecked(imageModelArrayList.get(position).getSelected()); 
    holder.tvAnimal.setText(imageModelArrayList.get(position).getAnimal()); 

    // holder.checkBox.setTag(R.integer.btnplusview, convertView); 
    holder.checkBox.setTag(position); 
    holder.checkBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Integer pos = (Integer) holder.checkBox.getTag(); 
      Toast.makeText(ctx, imageModelArrayList.get(pos).getAnimal() + " clicked!", Toast.LENGTH_SHORT).show(); 

      if (imageModelArrayList.get(pos).getSelected()) { 
       imageModelArrayList.get(pos).setSelected(false); 
      } else { 
       imageModelArrayList.get(pos).setSelected(true); 
      } 
     } 
    }); 


} 

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

class MyViewHolder extends RecyclerView.ViewHolder { 

    protected CheckBox checkBox; 
    private TextView tvAnimal; 

    public MyViewHolder(View itemView) { 
     super(itemView); 

     checkBox = (CheckBox) itemView.findViewById(R.id.cb); 
     tvAnimal = (TextView) itemView.findViewById(R.id.animal); 
    } 

} 
0

ちょうどrecyclerview画像クリックリスナーで確認するチェックボックスを設定する方法

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 
関連する問題