Search code examples
c#xamarin.android

MaterialSpinner to ListView Android Xamarin C#


I am trying to pass the value of the selected item in the Spinner to ListView on every assignstaffButton.Click, but the problem is I don't know the proper syntax for getting the value and pass it on listview. Do I need to convert it to string? I have a database for the staffnames in the spinner so I just need to pass it to listview. Thank you.

my Fragment

using AdamsonsEDApp.Adapters;
using AdamsonsEDApp.Data_Models;
using AdamsonsEDApp.Helpers;
using AdamsonsEDApp.Listeners;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Firebase.Annotations;
using Firebase.Database;
using FR.Ganfra.Materialspinner;
using Java.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SupportV7 = Android.Support.V7.App;

namespace AdamsonsEDApp.Fragments
{
    public class AssigningStaffFragment : Android.Support.V4.App.DialogFragment
    {
        MaterialSpinner assignstaffnameSpinner;
        Button assignstaffButton, assignstaffregisterButton, assignstaffremoveButton, assignstaffclearButton;
        ImageView exitFragmentButton;
        ListView assignstaffListView;

        
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your fragment here
        }

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            View view = inflater.Inflate(Resource.Layout.newassignstaff, container, false);
            this.Dialog.SetCanceledOnTouchOutside(false);


            assignstaffnameSpinner = (MaterialSpinner)view.FindViewById(Resource.Id.assignstaffnameSpinner);
            assignstaffButton = (Button)view.FindViewById(Resource.Id.assignstaffButton);
            assignstaffListView = (ListView)view.FindViewById(Resource.Id.assignstaffListView);
            exitFragmentButton = (ImageView)view.FindViewById(Resource.Id.exitfragmentButton);
            assignstaffremoveButton = (Button)view.FindViewById(Resource.Id.assignstaffremoveButton);
            assignstaffclearButton = (Button)view.FindViewById(Resource.Id.assignstaffclearButton);
            assignstaffregisterButton = (Button)view.FindViewById(Resource.Id.assignstaffregisterButton);

            assignstaffListView.ItemClick += AssignstaffListView_ItemClick;
            assignstaffregisterButton.Click += AssignstaffregisterButton_Click;
            assignstaffButton.Click += AssignstaffButton_Click;
            assignstaffremoveButton.Click += AssignstaffremoveButton_Click;
            assignstaffclearButton.Click += AssignstaffclearButton_Click;
            exitFragmentButton.Click += ExitFragmentButton_Click;
            RetrieveStaffNameData();
            return view;
        }

        private void AssignstaffclearButton_Click(object sender, EventArgs e)
        {
            assignstaffListView.clear();
        }

        private void AssignstaffremoveButton_Click(object sender, EventArgs e)
        {
            //remove selected item
        }

        private void AssignstaffListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            //select item 
        }

            //add spinner value to listview
        private void AssignstaffButton_Click(object sender, EventArgs e)
        {
            MaterialSpinner assignstaffspinner = (MaterialSpinner)sender;
            assignstaffListView.Add(assignstaffnameSpinner.GetItemAtPosition(e.Position).ToString());

            if (staffnameadapter != null)
            {
                staffnameadapter.Dispose();
            }
            staffnameadapter = new ArrayAdapter<string>(this.Activity, Android.Resource.Layout.SimpleListItem1, assignstaffListView);
            FindViewById(Resource.Id.assignstaffListView).Adapter = staffnameadapter;
        }

        private void ExitFragmentButton_Click(object sender, EventArgs e)
        {
            this.Dismiss();
        }

        public void SetupStaffNameSpinner()
        {
            staffnameList = new List<string>();

            foreach (var staffname in stafffullnameList)
            {
                staffnameList.Add(staffname.staffFullName);
            }

            staffnameadapter = new ArrayAdapter<string>(Activity, Android.Resource.Layout.SimpleSpinnerDropDownItem, staffnameList);
            staffnameadapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);

            assignstaffnameSpinner.Adapter = staffnameadapter;
            assignstaffnameSpinner.ItemSelected += AssignstaffnameSpinner_ItemSelected;
        }

        private void AssignstaffnameSpinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            staffname = staffnameList[e.Position];
        }

        public void RetrieveStaffNameData()
        {
            staffListeners = new StaffListeners();
            staffListeners.Create();
            staffListeners.StaffRetrieved += StaffListeners_StaffRetrieved;
        }

        private void StaffListeners_StaffRetrieved(object sender, StaffListeners.StaffDataEventArgs e)
        {
            stafffullnameList = e.Staffs;
            SetupStaffNameSpinner();
        }
    }
}

newassignstaff.xml My Layout for the problem.

    </RelativeLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#e2e2e2"/>

    <LinearLayout
        android:padding="16dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <fr.ganfra.materialspinner.MaterialSpinner
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:id="@+id/assignstaffnameSpinner"
            app:ms_enableFloatingLabel="true"
            app:ms_floatingLabelText="Select Event"
            app:ms_hint="Select Event"
            app:ms_alignLabels="true"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:id="@+id/assignstaffButton"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_gravity="center_horizontal"
                android:text="ASSIGN"
                android:layout_weight="1"
                android:background="?android:attr/colorPrimary"
                android:textColor="#fff"
                android:layout_margin="10px"
                android:layout_marginTop="20dp"/>

            <Button
                android:id="@+id/assignstaffremoveButton"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_gravity="center_horizontal"
                android:text="REMOVE"
                android:layout_weight="1"
                android:background="?android:attr/colorPrimary"
                android:textColor="#fff"
                android:layout_margin="10px"
                android:layout_marginTop="20dp"/>

            <Button
                android:id="@+id/assignstaffclearButton"
                android:layout_width="0dp"
                android:layout_height="40dp"
                android:layout_gravity="center_horizontal"
                android:text="CLEAR"
                android:layout_weight="1"
                android:background="?android:attr/colorPrimary"
                android:textColor="#fff"
                android:layout_margin="10px"
                android:layout_marginTop="20dp"/>

            </LinearLayout>
        <ListView
            android:id="@+id/assignstaffListView"
            android:hint="Staff Names"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:layout_marginTop="20dp"
            android:textSize="18sp"
            android:background="#edede0"
            android:textColor="#000"/>

        <Button
            android:id="@+id/assignstaffregisterButton"
            android:layout_width="300dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:text="REGISTER DETAILS"
            android:background="?android:attr/colorPrimary"
            android:textColor="#fff"
            android:layout_marginTop="20dp"/>
    </LinearLayout>

</LinearLayout>
[MaterialSpinner value "Name Test" pass to Listview every assign button clicked](https://i.sstatic.net/ZU1eo.png)


Solution

  • Here is the code in MainActivity.cs:

    namespace App3_android
    {
        ...
        public class MainActivity : AppCompatActivity
        {
            public List<string> ListView_list = new List<string>();
            public ArrayAdapter listAdapter;
            protected override void OnCreate(Bundle savedInstanceState)
            {
                var Spinner_list = new List<string>();
                Spinner_list.Add("Baboon");
                Spinner_list.Add("Capuchin Monkey");
                Spinner_list.Add("Blue Monkey");
                Spinner_list.Add("Squirrel Monkey");
                Spinner_list.Add("Golden Lion Tamarin");
                Spinner_list.Add("Howler Monkey");
                Spinner_list.Add("Japanese Macaque");
                
                base.OnCreate(savedInstanceState);
                Xamarin.Essentials.Platform.Init(this, savedInstanceState);
                SetContentView(Resource.Layout.activity_main);
    
                Spinner spinner = FindViewById<Spinner>(Resource.Id.spinner);
                ListView listView = FindViewById<ListView>(Resource.Id.ListView);
                spinner.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinner_ItemSelected);
                var adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, Spinner_list);        adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
                spinner.Adapter = adapter;
            }
            private void spinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
            {
                
                Spinner spinner = (Spinner)sender;
                ListView_list.Add(spinner.GetItemAtPosition(e.Position).ToString());
                if (listAdapter != null)
                {
                    listAdapter.Dispose();
                }
                listAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, ListView_list);
                FindViewById<ListView>(Resource.Id.ListView).Adapter=listAdapter;
            }
           ...
        }
    }
    

    Here is the namespace:

    using Android.App;
    using Android.OS;
    using Android.Runtime;
    using Android.Widget;
    using AndroidX.AppCompat.App;
    using System;
    using System.Collections.Generic;
    

    Wish it could be helpful to you.