Reputation: 41
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
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