Quantcast
Channel: Recent Threads — Xamarin Community Forums
Viewing all articles
Browse latest Browse all 204402

Xamarin Android: How to hide a item from mainactivity when a i click on recyclerview item

$
0
0

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.


Viewing all articles
Browse latest Browse all 204402

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>