Hello everyone my name is Taniguchi. I did a recyclerview and i trying to change the color of the row when its selected but when i click gives a timeout in this line inside the click function. myHolder.ItemView.SetBackgroundColor(mEmails[position].IsSelected() ? Color.LightBlue : Color.Transparent); I trying to multiple select rows in recyclerview. I followed this documentation How to implement multi-select in RecyclerView? The documentation is in java and i am using C# but i thought it could would, but it didnt work.
My recyclerview adapter:
My model:
public class RecyclerAdapter : RecyclerView.Adapter
{
private View view;
private Boolean isSelected = false;
public Boolean IsSelected()
{
return isSelected;
}
public void setSelected(Boolean selected)
{
isSelected = selected;
}
private Activity mActivity;
private MyActionMode mActionMode;
private List<Email> mEmails;
private Context context;
private ActionMode mode;
public event EventHandler<int> ItemClick;
public RecyclerAdapter(List<Email> emails, Context context)
{
mEmails = emails;
this.context = context;
}
public RecyclerAdapter(List<Email> emails, Activity activity)
{
mEmails = emails;
mActivity = activity;
}
public class MyView : RecyclerView.ViewHolder
{
public View mMainView { get; set; }
public TextView mName { get; set; }
public TextView mSubject { get; set; }
public TextView mMessage { get; set; }
public MyView(View view) : base(view)
{
mMainView = view;
}
}
public override int ItemCount
{
get { return mEmails.Count; }
}
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
LayoutInflater inflater = LayoutInflater.From(parent.Context);
View row = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.row, parent, false);
RecyclerViewHolder vh = new RecyclerViewHolder(row, OnClick, OnLongClick);
return vh;
}
void OnLongClick(object sender, View.LongClickEventArgs args, int position)
{
mActionMode = new MyActionMode(mActivity, this, position);
mode = mActivity.StartActionMode(mActionMode);
((View)sender).Selected = true;
selectedPosition = position;
NotifyDataSetChanged();
return;
}
int selectedPosition = -1;
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
RecyclerViewHolder myHolder = holder as RecyclerViewHolder;
myHolder.mName.Text = mEmails[position].Name;
myHolder.mSubject.Text = mEmails[position].Subject;
myHolder.mMessage.Text = mEmails[position].Message;
myHolder.ItemView.SetBackgroundColor(mEmails[position].IsSelected() ? Color.LightBlue : Color.Transparent);
}
public RecyclerViewHolder myHolder;
void OnClick(int position)
{
mEmails[position].setSelected(!mEmails[position].IsSelected());
myHolder.ItemView.SetBackgroundColor(mEmails[position].IsSelected() ? Color.LightBlue : Color.Transparent);
}
}
public class Email
{
public string Name { get; set; }
public string Subject { get; set; }
public string Message { get; set; }
private Boolean isSelected = false;
public Boolean IsSelected()
{
return isSelected;
}
public void setSelected(Boolean selected)
{
isSelected = selected;
}
}