2016-12-06 212 views
0

我在android(xamarin)中创建自定义列表视图。我有行设计和适配器以及活动。每件事情都运行良好。 现在在排设计中我有一个图像按钮。 如果我需要它来打开一个新的活动,在哪里以及如何实现此Imagebutton的click事件。 请注意,行点击事件效果很好,它正在做它应该做的事情。 我试图在适配器get view中实现Imagebutton点击,但问题是它在这个代码中多次输入不正确。xamarin:android自定义listview与按钮事件

这是我的适配器代码:

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; } 
     } 
    } 
} 

回答

2

对于单个事件Occure你必须使用HasOnClickListeners

改变此密码

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

这个

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

更新:要实现以下方式方法的使用。

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

创建以这种方式工作

void btnOneClick(){ 

}; 
+0

精细谢谢。但是有没有办法从活动中调用此事件?在eclipse中,我用来设置按钮onclicklistener并从活动中实现此侦听器。我可以在这里做同样的事吗? –

+0

通过在您的活动中创建一个方法public void HandleButtonClick(object sender,EventArgs e){}并将其设置为适配器内的按钮单击事件,您可以在按钮中单击您的活动。 holder.Image.Click + = yourActivityInstance.HandleButtonClick; – HeisenBerg

+0

@Ironman这个void btnoneclick是写在活动中的吗? –