Hello Everyon my name is Taniguchi
I've implemented a botton navigation view on my mainactivity page, and i have a recyclerview, i would like to know, how can i hide this botton navigation view that is on myactivity page when i click on a item in the recyclerview.
My mainactivity class:
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
public RecyclerView.ViewHolder holder;
public int position;
private RecyclerView.Adapter mAdapter;
private List<Email> mEmails;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
Xamarin.Essentials.Platform.Init(this, bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
mRecyclerView = FindViewById<RecyclerView>(Resource.Id.recyclerViwer);
mRecyclerView.AddItemDecoration(new DividerItemDecoration(mRecyclerView.Context, DividerItemDecoration.Vertical));
mRecyclerView.HasFixedSize = true;
SetupList();
//Create our layout Manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.SetLayoutManager(mLayoutManager);
RecyclerAdapter mAdapter = new RecyclerAdapter(mEmails, this);
mRecyclerView.SetAdapter(mAdapter);
BottomNavigationView bottonButton = FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
RecyclerViewHolder myHolder = holder as RecyclerViewHolder;
bottonButton.Visibility = mEmails[position].IsSelected() ? ViewStates.Visible : ViewStates.Gone;
}
My recyclerview click listener:
public class RecyclerViewHolder : RecyclerView.ViewHolder
{
public TextView mName;
public TextView mSubject;
public TextView mMessage;
public CheckBox cbx;
public Button bottonbutton;
public int count = 0;
private Action<object, View.LongClickEventArgs, int> onLongClick;
public RecyclerViewHolder(View itemView) : base(itemView)
{
mName = itemView.FindViewById<TextView>(Resource.Id.textView1);
mSubject = itemView.FindViewById<TextView>(Resource.Id.textView2);
mMessage = itemView.FindViewById<TextView>(Resource.Id.textView3);
cbx = itemView.FindViewById<CheckBox>(Resource.Id.checkBox1);
}
}
My RecyclerView Adapter:
public class RecyclerAdapter : RecyclerView.Adapter, View.IOnClickListener, View.IOnLongClickListener
{
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 bool count = false;
public int CountAuxiliar = 0;
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);
return vh;
}
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
RecyclerViewHolder myHolder = holder as RecyclerViewHolder;
myHolder.cbx.Visibility = mEmails[position].IsSelected() ? ViewStates.Visible : ViewStates.Gone;
myHolder.cbx.Checked = mEmails[position].IsSelected();
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);
myHolder.ItemView.Tag = position;
myHolder.ItemView.SetOnClickListener(this);
myHolder.ItemView.SetOnLongClickListener(this);
}
void View.IOnClickListener.OnClick(View v)
{
if (CountAuxiliar > 0 && mode != null)
{
int position = (int)v.Tag;
mEmails[position].setSelected(!mEmails[position].IsSelected());
v.SetBackgroundColor(mEmails[position].IsSelected() ? Color.LightBlue : Color.Transparent);
v.FindViewById(Resource.Id.checkBox1).Visibility = mEmails[position].IsSelected() ? ViewStates.Visible : ViewStates.Invisible;
if (mEmails[position].IsSelected())
{
CountAuxiliar++;
}
else
{
CountAuxiliar--;
}
mode.Title = CountAuxiliar.ToString() + " " + "Selecionados";
Toast.MakeText(v.Context, "Click : " + CountAuxiliar + "---" + position, ToastLength.Short).Show();
}
if (CountAuxiliar < 1 && count == true)
{
mode.Finish();
}
}
public bool OnLongClick(View v)
{
if (CountAuxiliar < 1)
{
CountAuxiliar = 1;
count = true;
int position = (int)v.Tag;
mEmails[position].setSelected(!mEmails[position].IsSelected());
v.SetBackgroundColor(mEmails[position].IsSelected() ? Color.LightBlue : Color.Transparent);
BottomNavigationView bottonButton = FindViewById(Resource.Id.bottom_navigation);
v.FindViewById(Resource.Id.checkBox1).Visibility = mEmails[position].IsSelected() ? ViewStates.Visible : ViewStates.Invisible; mActionMode = new MyActionMode(mActivity, this, position);
v.FindViewById(Resource.Id.bottom_navigation).Visibility = ViewStates.Visible;
mode = mActivity.StartActionMode(mActionMode);
mode.Title = CountAuxiliar.ToString() + " " + "Selecionado"; count = true;
Toast.MakeText(v.Context, "Long Click : " + mEmails[position].IsSelected() + "---" + position, ToastLength.Short).Show();
}
return true;
}
}
My Contextual Action Bar Class:
public class MyActionMode : Java.Lang.Object, ActionMode.ICallback
{
private RecyclerViewHolder holder;
private Context mContext;
private RecyclerView.Adapter mAdapter;
private int currentPosition;
private Button button;
public View v;
private IMenu menu;
private View menuItemView;
private List<Email> mEmails;
public MyActionMode(Context context) : this(context, null, 0)
{
}
public MyActionMode(Context context, RecyclerView.Adapter adapter, int position)
{
mContext = context;
mAdapter = adapter;
currentPosition = position;
}
public bool OnActionItemClicked(ActionMode mode, IMenuItem item)
{
switch (item.ItemId)
{
case Resource.Id.itemOneId:
return true;
case Resource.Id.itemTwoId:
// do Update
return true;
default:
return false;
}
}
public bool OnCreateActionMode(ActionMode mode, IMenu menu)
{
mode.MenuInflater.Inflate(Resource.Menu.ContextualMenu, menu);
button = (Button)menu.FindItem(Resource.Id.itemTwoId).ActionView;
button.Background = null;
var draw = ContextCompat.GetDrawable(mContext, Resource.Drawable.three_dots);
button.SetCompoundDrawablesWithIntrinsicBounds(draw, null, null, null);
//button.Text = "";
button.Click += delegate {
PopupMenu menu1 = new PopupMenu(mContext, button);
menu1.Inflate(Resource.Menu.popup_menu);
menu1.Show();
};
return true;
}
public void OnDestroyActionMode(ActionMode mode)
{
mode.Dispose();
}
public bool OnPrepareActionMode(ActionMode mode, IMenu menu)
{
return false;
}
}
The error is ocorring in the following line of onlongclik function in recyclerview adapter:
BottomNavigationView bottonButton = FindViewById(Resource.Id.bottom_navigation);
The error is: CS0120 An object reference is required for the non-static field, method, or property 'Activity.FindViewById(int)'
And When i Try the following line:
BottomNavigationView bottonButton = v.FindViewById<BottomNavigationView>(Resource.Id.bottom_navigation);
bottonButton.Visibility = ViewStates.Visible;
The Error is: System.NullReferenceException: Object reference not set to an instance of an object.