У меня есть ListView
, который состоит из ToggleButton
для каждой строки. Это ToggleButton
в основном кнопка избранного. Сначала я захожу в базу данных и проверяю, существует ли конкретное значение, если да, я отображаю кнопку красным или серым. Проблема заключается в том, что всякий раз, когда я нажимаю на любую кнопку, все кнопки становятся красными или наоборот, и по умолчанию также при прокрутке обновляются все кнопки. Код моего адаптера:
public class PostAdapter extends ArrayAdapter<PostModel> {
Drawable mDrawable;
ViewHolder viewHolder;
public PostAdapter(Context context, ArrayList<PostModel> objects) {
super(context, 0, objects);
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//Get the date item for this position
final PostModel postModel = getItem(position);
boolean isClicked = false;
//Check if the existing view is being reused, otherwise inflate a new view from custom_row layout
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.custom_row, parent, false);
viewHolder = new ViewHolder();
//Casting of views from the custom_row layout
viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
viewHolder.tvPost = (TextView) convertView.findViewById(R.id.tvPost);
viewHolder.imageIcon = (ImageView) convertView.findViewById(R.id.imageIcon);
viewHolder.toggleButton = (ToggleButton) convertView.findViewById(R.id.myHeartToggleButton);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//Filling each views values
viewHolder.tvTitle.setText(postModel.getTitle());
viewHolder.tvPost.setText(postModel.getPost());
viewHolder.imageIcon.setImageResource(postModel.getAssociatedDrawable());
final DBHelper dbHelper = new DBHelper(getContext().getApplicationContext());
dbHelper.open();
if (dbHelper.isClickedPost(postModel.getTitle())) {
Drawable mDrawable = ContextCompat.getDrawable(getContext().getApplicationContext(), R.drawable.favorite_icon);
mDrawable.setColorFilter(new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_IN));
viewHolder.toggleButton.setBackgroundDrawable(mDrawable);
isClicked = true;
} else {
viewHolder.toggleButton.setBackgroundDrawable(ContextCompat.getDrawable(getContext().getApplicationContext(), R.drawable.favorite_icon));
}
final boolean finalIsClicked = isClicked;
viewHolder.toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if (!finalIsClicked) {
Toast.makeText(getContext().getApplicationContext(), "Clicked.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getContext().getApplicationContext(), "Clicked again.", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getContext().getApplicationContext(), "Hello...", Toast.LENGTH_SHORT).show();
}
}
});
return convertView;
}
static class ViewHolder {
TextView tvTitle, tvPost;
ImageView imageIcon;
ToggleButton toggleButton;
}
}