2017-02-16 13 views
0

ビューの各カードにチェックボックス付きのリサイクラビューがあります。ビューの特定のチェックボックスをクリックすると、他のすべてのチェックボックスをオフにしたい(条件には、奇数などのカードのようにすることができます)。どうやってやるの?私のアダプタコードは以下の通りです。リサイクラビューのチェックボックスの動作をプログラムで制御します。

public class PlatformAdapter extends RecyclerView.Adapter<PlatformAdapter.ViewHolder> { 

ArrayList<Batch> batches; 
ArrayList<CourseSlug> courses; 
boolean isInstituteStudent; 

public void setBatches(ArrayList<Batch> batches) { 
    this.batches = batches; 
    notifyDataSetChanged(); 
} 

public void setCourses(ArrayList<CourseSlug> courses) { 
    this.courses = courses; 
    notifyDataSetChanged(); 
} 

public ArrayList<CourseSlug> getCourses() { 
    return courses; 
} 

public ArrayList<Batch> getBatches() { 
    return batches; 
} 

public void setInstituteStudent(boolean instituteStudent) { 
    isInstituteStudent = instituteStudent; 
} 

public boolean isInstituteStudent() { 
    return isInstituteStudent; 
} 

public PlatformAdapter() { 
    courses = new ArrayList<>(); 
    batches = new ArrayList<>(); 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell_platform_item, parent, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(final ViewHolder holder, final int position) { 
    if (isInstituteStudent) { 
     Batch batch = batches.get(position); 
     holder.enrolment.setText(batch.getName()); 
     holder.selectEnrollment.setChecked(batch.isPreselect()); 
    } else { 
     final CourseSlug course = courses.get(position); 
     holder.enrolment.setText(course.getName()); 
     holder.selectEnrollment.setChecked(course.isPreselect()); 


    } 
} 

@Override 
public int getItemCount() { 
    return isInstituteStudent ? batches.size() : courses.size(); 
} 

class ViewHolder extends RecyclerView.ViewHolder { 

    TextView enrolment; 
    CheckBox selectEnrollment; 

    public ViewHolder(final View itemView) { 
     super(itemView); 
     enrolment = (TextView) itemView.findViewById(R.id.tv_entrollment); 
     selectEnrollment = (CheckBox) itemView.findViewById(R.id.cb_select_entrollment); 
     selectEnrollment.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
       int index = getLayoutPosition(); 
       if(isInstituteStudent) { 
        Batch batch = batches.get(index); 
        batch.setPreselect(b); 
       } else { 
        CourseSlug course = courses.get(index); 
        course.setPreselect(b); 



         } 
        } 


     }); 

    } 
} 

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

私のCourseslugクラスには、isTrue()という名前のパラメータがあります。 if、courseSlug.isTrue()== true;どのカードのチェックボックスが自分の状態を満たしているかチェックされ、チェックされていないその他のチェックボックスはチェックされなくなります。これは私がやりたいことです。

public class CourseSlug { 
String name; 
String slug; 
boolean preselect; 
boolean istrue; 

public boolean isTrue() { 
    return istrue; 
} 

public void setisTrue(boolean isTrue) { 
    this.isTrue = istrue; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getSlug() { 
    return slug; 
} 

public void setSlug(String slug) { 
    this.slug = slug; 
} 

public boolean isPreselect() { 
    return preselect; 
} 

public void setPreselect(boolean preselect) { 
    this.preselect = preselect; 
}} 

答えて

0

ビューは必ずしも表示されているわけではないため、アダプタにブール状態変数を保持する必要があります。ユーザーが「マスター」チェックボックスをクリックしたときに変数を切り替えます。次に、この変数をonBindViewHolder()に使用して、各行のチェックボックスのチェック状態を設定します。

+0

あなたは私のコードでこれを実装することができますか? –

+0

@Arjunはい、これはコード –

+0

で行うことができます。自分のコードの変更で回答を編集するだけです。私はそれを直接再利用することができます –

0

私はonBindViewHolderメソッドを編集しました。これは便利ですホープ:)

private SparseArray<SparseBooleanArray> sparseArray = new SparseArray<>(); 

     @Override 
     public void onBindViewHolder(final ViewHolder holder, final int position) { 

       final CourseSlug course = courses.get(position); 
       holder.enrolment.setText(course.getName()); 
       holder.selectEnrollment.setChecked(course.isPreselect()); 
       holder.selectEnrollment.setId(position); 
       holder.selectEnrollment.setChecked(false); 

      if (sparseArray.get(holder.selectEnrollment.getId()) != null) { 
       boolean isChecked = sparseArray.get(holder.selectEnrollment.getId()).get(holder.selectEnrollment.getId()); 
       holder.selectEnrollment.setChecked(isChecked); 
      } 

    holder.selectEnrollment.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        sparseArray.clear(); 

      SparseBooleanArray checkedPosition = new SparseBooleanArray(); 
      checkedPosition.put(v.getId(), true); 
      sparseArray.put(tagId, checkedPosition); 
      notifySetDataChanged(); 
       } 
      }); 


    } 
+0

とは何ですか?ここに ? –

+0

@Jeevaに返信してください –

+0

@Arjun:申し訳ありませんarjunはコードを修正しました、ここに行きます – Jeevanandhan

関連する問題