2016-12-06 4 views
0

Ich erstelle eine benutzerdefinierte Listenansicht in Android (Xamarin). Ich habe das Row-Design und den Adapter und die Aktivität. alles gut laufen. Jetzt im Row Design habe ich eine Bildschaltfläche. Wo und wie das Click-Ereignis dieses Imagebuttons implementiert wird, wenn es zum Öffnen einer neuen Aktivität benötigt wird. Beachten Sie, dass das Row-Click-Ereignis gut funktioniert und es tut, was es tun soll. Ich habe versucht, den ImageButton zu implementieren, klicken Sie in der Ansicht des Adapters get, aber das Problem ist, dass es in diesem Code mehrere Male eingibt, die falsch ist.Xamarin: Android benutzerdefinierte Listenansicht mit Schaltfläche Ereignis

das ist mein Adapter Code:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 

    using Android.App; 
    using Android.Content; 
    using Android.OS; 
    using Android.Runtime; 
    using Android.Views; 
    using Android.Widget; 

    namespace SocrateMobile.Droid.Adapter 
    { 
    class PulledItemList_Adapter : BaseAdapter<oneimg_twolbl> 
    { 
     private Activity context; 
     private List<oneimg_twolbl> AllItemList; 


     public PulledItemList_Adapter(Activity context, List<oneimg_twolbl>  AllItemList) 
     { 
      this.AllItemList = AllItemList; 
      this.context = context; 
     } 
     public oneimg_twolbl GetItem_bypos(int position) 
     { 
      return AllItemList[position]; 
     } 
     public override oneimg_twolbl this[int position] 
     { 
      get { return AllItemList[position]; } 
     } 

     public override int Count 
     { 
      get { return AllItemList.Count; } 
     } 

     public override long GetItemId(int position) 
     { 
      return position; 
     } 

     public override View GetView(int position, View convertView, ViewGroup parent) 
     { 
      Holder_oneimg_twolbl holder = null; 
      var view = convertView; 

      if (view != null) 
       holder = view.Tag as Holder_oneimg_twolbl; 


      if (holder == null) 
      { 
       holder = new Holder_oneimg_twolbl(); 
       view = context.LayoutInflater.Inflate(Resource.Layout.oneimg_twolbl, null); 
       holder.Text = view.FindViewById<TextView>(Resource.Id.text_list4_view); 
       holder.Text2 = view.FindViewById<TextView>(Resource.Id.text_list4_view2); 
       holder.Image = view.FindViewById<ImageButton>(Resource.Id.image_list4_view); 
       view.Tag = holder; 
      } 

      var current_item = AllItemList[position]; 


      holder.Text.Text = current_item.FirstTxt; 
      holder.Text2.Text = current_item.SecondTxt; 
      holder.Image.SetImageResource(current_item.FirstImg); 
      holder.Image.Click += (sender, e) => 
      { 
       int x = position; 
      }; 
      return view; 
     } 



     public class Holder_oneimg_twolbl : Java.Lang.Object 
     { 
      public TextView Text { get; set; } 
      public TextView Text2 { get; set; } 
      public ImageButton Image { get; set; } 
     } 
    } 
} 

Antwort

2

Für das Einzelereignis OCCURE haben Sie HasOnClickListeners verwenden.

Ändern Sie diesen Code

holder.Image.Click += (sender, e) => 
    { 
     int x = position; 
    }; 

dieser

if(!holder.Image.HasOnClickListeners) 
    { 
     holder.Image.Click += (sender, e) => 
     { 
     int x = position; 
     }; 
    } 

Update: Zur Umsetzung Methode Gebrauch unten Art und Weise.

holder.Image.Click += delegate{ 
     btnOneClick(); 
}; 

auf diese Weise erstellen

void btnOneClick(){ 

}; 
+0

, die gut, danke funktioniert. Aber gibt es eine Möglichkeit, dieses Ereignis von der Aktivität zu nennen? In Eclipse habe ich den Onclicklistener auf die Schaltfläche gesetzt und diesen Listener aus der Aktivität implementiert. kann ich das gleiche hier tun? –

+0

Sie können in Ihrer Aktivität auf die Schaltfläche klicken, indem Sie in Ihrer Aktivität eine Methode erstellen, public void HandleButtonClick (Objektabsender, EventArgs e) {} und dies als das Ereignis click click in Ihrem Adapter festlegen. holder.Image.Click + = yourActivityInstance.HandleButtonClick; – HeisenBerg

+0

@Ironman dieser void btnoneclick ist in der Aktivität rechts geschrieben? –

Verwandte Themen