سلام استاد،
من توی برنامه ام از یه Recycler View استفاده کردم که یک چک باکس داخلش قرار داره.
برای مثال وقتی که روی آیتم 1 کلیک میشه و چک ش true میشه آیتم 8 هم همراهش چک ش true میشه (همزمان)
با چندتا سرچ فهمیدم که باید از متد NotifyDataSetChanged داخل آداپتر استفاده کنم اما این متد روش استفاده خاصی رو داره
ممنون میشم راهنمایی کنید که چطور و کجا از این متد استفاده کنم.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
using Todo.Data.Context;
using Todo.Data.Models;
using Todo.Utility;
namespace Todo.App
{
class RvWorksAdapter : RecyclerView.Adapter, IItemClickListener
{
private List<Work> _lstWorks;
private Activity _activity;
public RvWorksAdapter(List<Work> list, Activity activity)
{
_lstWorks = list;
_activity = activity;
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
RvWorksViewHolder view = holder as RvWorksViewHolder;
Work work = _lstWorks[position];
int hour = TimeDifference.HourDifference(work.StartHour, work.EndHour);
int min = TimeDifference.MinuteDifference(work.StartMinute, work.EndMinute);
view.TvTitle.Text = work.Title;
if (hour == 0)
{
view.TvTime.Hint = $"{min} دقیقه";
}
else if (min == 0)
{
view.TvTime.Hint = $"{hour} ساعت";
}
else
{
view.TvTime.Hint = $"{hour} ساعت و {min} دقیقه";
}
view.ChbStatus.Checked = (work.StatusId == (int)StatusState.Normal) ? false : true;
view.ChbStatus.CheckedChange += (sender, e) =>
{
TodoDatabase db = new TodoDatabase();
if (e.IsChecked)
{
work.StatusId = (int)StatusState.Completed;
}
else
{
work.StatusId = (int)StatusState.Normal;
}
db.WorkRepository.EditAsync(work);
};
view.SetItemClickListener(this);
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View view = LayoutInflater.From(parent.Context)
.Inflate(Resource.Layout.rv_works_item, parent, false);
var tvTitle = view.FindViewById<TextView>(Resource.Id.tvWorkTitle);
var tvTime = view.FindViewById<TextView>(Resource.Id.tvWorkTime);
var chbStatus = view.FindViewById<CheckBox>(Resource.Id.chbWorkStatus);
return new RvWorksViewHolder(view)
{
TvTitle = tvTitle,
TvTime = tvTime,
ChbStatus = chbStatus
};
}
public void OnClick(View itemView, int position, bool isLongClick)
{
if (!isLongClick)
{
Intent intent = new Intent(_activity, typeof(AddWorkActivity));
intent.PutExtra(AddWorkActivity.WORK_ID, _lstWorks[position].WorkId);
_activity.StartActivityForResult(intent, WorkActivity.EDIT_REQUEST_CODE);
}
}
public override int ItemCount { get => _lstWorks.Count; }
}
public class RvWorksViewHolder : RecyclerView.ViewHolder, View.IOnClickListener
{
public View View { get; set; }
public TextView TvTitle { get; set; }
public TextView TvTime { get; set; }
public CheckBox ChbStatus { get; set; }
private IItemClickListener _itemClickListener;
public RvWorksViewHolder(View itemView) : base(itemView)
{
this.View = itemView;
View.SetOnClickListener(this);
}
public void SetItemClickListener(IItemClickListener itemClickListener)
{
_itemClickListener = itemClickListener;
}
public void OnClick(View v)
{
_itemClickListener.OnClick(v, AdapterPosition, false);
}
}
}