私は自分のCustomAdapterでListViewを作成しています。 ListViewの各行には、このlibraryから使用したトグルボタンがあります。だからここに私はそれが正しい行の位置を返しトグル状態を変更すると、私のアダプターコードViewHolderパターンでListView内のイベントリスナーが間違ったアイテムをトリガーする
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Attendance attendance = getItem(position);
if(convertView==null){
convertView = LayoutInflater.from(context).inflate(R.layout.student_attendance_list_model,parent,false);
holder = new ViewHolder();
holder.studentName = (TextView)convertView.findViewById(R.id.student_name);
holder.studentSchool = (TextView)convertView.findViewById(R.id.student_school);
holder.bulletIcon = (ImageView) convertView.findViewById(R.id.bullet_img);
holder.toggleButton = (TriStateToggleButton) convertView.findViewById(R.id.tri_state_toggle);
holder.yesText = (TextView)convertView.findViewById(R.id.yes_btn);
holder.noText = (TextView)convertView.findViewById(R.id.no_btn);
holder.toggleButton.setOnToggleChanged(new TriStateToggleButton.OnToggleChanged() {
@Override
public void onToggle(TriStateToggleButton.ToggleStatus toggleStatus, boolean b) {
switch (toggleStatus){
case off:
holder.yesText.setTextColor(context.getResources().getColor(R.color.green));
holder.noText.setTextColor(context.getResources().getColor(R.color.black_text));
break;
case mid:
holder.noText.setTextColor(context.getResources().getColor(R.color.black_text));
holder.yesText.setTextColor(context.getResources().getColor(R.color.black_text));
break;
case on:
holder.noText.setTextColor(context.getResources().getColor(R.color.trial_color));
holder.yesText.setTextColor(context.getResources().getColor(R.color.black_text));
break;
}
}
});
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
holder.toggleButton.setOnToggleChanged(new TriStateToggleButton.OnToggleChanged() {
@Override
public void onToggle(TriStateToggleButton.ToggleStatus toggleStatus, boolean b) {
LogHelper.debug(getClass(),"pos = "+position);
switch (toggleStatus){
case off:
holder.yesText.setTextColor(context.getResources().getColor(R.color.green));
holder.noText.setTextColor(context.getResources().getColor(R.color.black_text));
break;
case mid:
holder.noText.setTextColor(context.getResources().getColor(R.color.black_text));
holder.yesText.setTextColor(context.getResources().getColor(R.color.black_text));
break;
case on:
holder.noText.setTextColor(context.getResources().getColor(R.color.trial_color));
holder.yesText.setTextColor(context.getResources().getColor(R.color.black_text));
break;
}
}
});
holder.studentName.setText(attendance.getUserInformation().getFullName());
holder.studentSchool.setText(attendance.getUserInformation().getSchool());
try {
switch (attendance.getUserInformation().getStatus()) {
case ("enroll"):
holder.bulletIcon.setImageResource(R.drawable.enrollment_circle);
break;
case ("transfer"):
holder.bulletIcon.setImageResource(R.drawable.transfer_circle);
break;
case ("trial"):
holder.bulletIcon.setImageResource(R.drawable.trial_circle);
break;
case ("replace"):
holder.bulletIcon.setImageResource(R.drawable.replacement_circle);
break;
}
}catch (Exception e){e.printStackTrace();}
switch (attendance.getAttend()){
case ("true"):
holder.yesText.setTextColor(context.getResources().getColor(R.color.green));
holder.noText.setTextColor(context.getResources().getColor(R.color.black_text));
holder.toggleButton.setToggleOff();
break;
case ("false"):
holder.noText.setTextColor(context.getResources().getColor(R.color.trial_color));
holder.yesText.setTextColor(context.getResources().getColor(R.color.black_text));
holder.toggleButton.setToggleOn();
break;
default:
//holder.toggleButton.setMidColor(context.getResources().getColor(R.color.grey_87));
holder.toggleButton.setToggleMid();
holder.noText.setTextColor(context.getResources().getColor(R.color.black_text));
holder.yesText.setTextColor(context.getResources().getColor(R.color.black_text));
break;
}
return convertView;
}
class ViewHolder {
TextView studentName;
TextView studentSchool;
ImageView bulletIcon;
TriStateToggleButton toggleButton;
TextView yesText;
TextView noText;
}
だが、そのyesTextとnoTextは色を変えていません。代わりに、トグルをクリックするたびに、最後のアイテムのyesTextとnoTextがトリガーされて色が変わります。上記
Button onClick get wrong position in viewholder patterned listview
リンクは私と全く同じ問題を抱えているが、私は私の場合には)notifyDataSetChanged(の実装について理解していません。
おかげ
素晴らしいアイデアを呼びます!ありがとう – VincentTheonardo