Eng.Ahmed
Eng.Ahmed

Reputation: 41

ListView(OnlistItemClick) Executes the event more than once

When I click ListView(OnlistItemClick) it executes the event more than once.

When you choose again (spinner) it performs better.

My Problem

void OnlistItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
    var listprojall = sender as ListView;
    var t = tableItems[e.Position];
    Globals.GlobalAskId = t.SubHeading1;
    StartActivity(typeof(Teansrproj));
}

Full code:

  List<TableItem> tableItems;
  protected override void OnCreate(Bundle bundle)
  {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Projlist);

        mToolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
        SetSupportActionBar(mToolbar);
        SupportActionBar.Title = "قائمة طلبات المشاريع";

        Selling.WebServiceDB ws = new Selling.WebServiceDB();
        ws.MajorAListCompleted += Ws_MajorAListCompleted;
        ws.MajorAListAsync("المرحلة الجامعية");
    }

    private void Ws_MajorAListCompleted(object sender, Selling.MajorAListCompletedEventArgs e)
    {
        if (e.Result.ToString().Equals("0"))
        {

        }
        else
        {
            Spinner spinmajer = FindViewById<Spinner>(Resource.Id.spinmajer);
            List<String> datalist = new List<String>();
            foreach (var item in e.Result)
            {
                datalist.Add(item.MajorA);
            }
            var ArrayAdpter1 = new ArrayAdapter<String>(
            this, Android.Resource.Layout.SimpleSpinnerItem, datalist);
            spinmajer.Adapter = ArrayAdpter1;
            //spinmajer.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinmater3_ItemSelected);
            spinmajer.ItemSelected +=  spinmater3_ItemSelected ;
        }
    }

    private void spinmater3_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
    {
        Spinner spinmajer = (Spinner)sender;
        string input2 = Convert.ToString(spinmajer.GetItemAtPosition(e.Position));

        Selling.WebServiceDB ws2 = new Selling.WebServiceDB();
        ws2.MaterDataLvlCompleted += Ws2_MaterDataLvlCompleted;
        ws2.MaterDataLvlAsync("المرحلة الجامعية", input2);
    }

    private void Ws2_MaterDataLvlCompleted(object sender, Selling.MaterDataLvlCompletedEventArgs e)
    {
        if (e.Result.ToString().Equals("0"))
        {

        }
        else
        {
            Spinner spinmater3 = FindViewById<Spinner>(Resource.Id.spinmater3);
            List<String> datalist = new List<String>();
            foreach (var item in e.Result)
            {
                datalist.Add(item.MaterNameA);
            }
            var ArrayAdpter1 = new ArrayAdapter<String>(
            this, Android.Resource.Layout.SimpleSpinnerItem, datalist);
            spinmater3.Adapter = ArrayAdpter1;
            //spinmater3.ItemSelected += new EventHandler<AdapterView.ItemSelectedEventArgs>(spinner1_ItemSelected);
            spinmater3.ItemSelected += spinner1_ItemSelected;
        }
    }

    private void spinner1_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
    {
        Spinner spinmajer = (Spinner)sender;
        string sub = Convert.ToString(spinmajer.GetItemAtPosition(e.Position));

        Selling.WebServiceDB ws3 = new Selling.WebServiceDB();
        ws3.ProjectListCompleted += Ws3_ProjectListCompleted;
        ws3.ProjectListAsync(sub);
    }

    private void Ws3_ProjectListCompleted(object sender, Selling.ProjectListCompletedEventArgs e)
    {
        ListView listprojall = FindViewById<ListView>(Resource.Id.listprojall);
        string msg = "";

        if (e.Result.ToString().Equals("0"))
        {
            var callDialog = new AlertDialog.Builder(this);
            callDialog.SetTitle("Notify");
            callDialog.SetMessage(msg);
            callDialog.SetNeutralButton("The Customer Code is not correct", delegate { });
            callDialog.Show();
        }
        else
        {
            // full class
            tableItems = new List<TableItem>();
            foreach (var item in e.Result)
            {
                tableItems.Add(new TableItem(item.ProjName, item.Projansr, Convert.ToString(item.Projid)));
            }
            listprojall.Adapter = new HomeScreenAdapter(this, tableItems);
            //listprojall.ItemClick += OnlistItemClick;
            listprojall.ItemClick += new EventHandler<AdapterView.ItemClickEventArgs>(OnlistItemClick);
        }
    }

    void OnlistItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        var listprojall = sender as ListView;
        var t = tableItems[e.Position];
        Globals.GlobalAskId = t.SubHeading1;
        StartActivity(typeof(Teansrproj));
    }

    // adpater manage
    public class HomeScreenAdapter : BaseAdapter<TableItem>
    {
        List<TableItem> items;
        Activity context;
        public HomeScreenAdapter(Activity context, List<TableItem> items)
            : base()
        {
            this.context = context;
            this.items = items;
        }
        public override long GetItemId(int position)
        {
            return position;
        }
        public override TableItem this[int position]
        {
            get { return items[position]; }
        }
        public override int Count
        {
            get { return items.Count; }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = items[position];
            View view = convertView;
            if (view == null) // no view to re-use, create new
                view = context.LayoutInflater.Inflate(Resource.Layout.Ticket_News, null);
            view.FindViewById<TextView>(Resource.Id.Text1).Text = item.Heading;
            view.FindViewById<TextView>(Resource.Id.Text2).Text = item.SubHeading;
            view.FindViewById<TextView>(Resource.Id.Text3).Text = item.SubHeading1;

            return view;
        }
    }

    public class TableItem
    {
        public string Heading;
        public string SubHeading;
        public string SubHeading1;

        public TableItem(string Heading, string SubHeading, string SubHeading1)
        {
            this.Heading = Heading;
            this.SubHeading = SubHeading;
            this.SubHeading1 = SubHeading1;
        }
    }
}

}

Upvotes: 1

Views: 97

Answers (1)

Taier
Taier

Reputation: 2119

You don't need to bind

OnlistItemClick

multiple times.

You can move

ListView listprojall = FindViewById<ListView>(Resource.Id.listprojall);
listprojall.ItemClick += new EventHandler<AdapterView.ItemClickEventArgs>(OnlistItemClick);

in OnCreate so it only assigns ones.

Upvotes: 0

Related Questions