【问题标题】:xamarin: android custom listview with button eventxamarin:带有按钮事件的android自定义列表视图
【发布时间】:2016-12-06 15:43:40
【问题描述】:

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

这是我的适配器代码:

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

【问题讨论】:

    标签: android listview xamarin


    【解决方案1】:

    对于单个事件发生,您使用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(){
    
    };
    

    【讨论】:

    • 效果很好,谢谢。但是有没有办法从活动中调用这个事件?在 Eclipse 中,我曾经为按钮设置一个 onclicklistener 并从活动中实现这个监听器。我可以在这里做同样的事情吗?
    • 您可以通过在您的活动中创建一个方法 public void HandleButtonClick (object sender, EventArgs e) { } 在您的活动中单击按钮,并将其设置为适配器内的按钮单击事件。 holder.Image.Click += yourActivityInstance.HandleButtonClick;
    • @Ironman this void btnoneclick 是写在activity中的吧?
    • @chahidkhalil 是的,请参阅HeisenBerg 的评论。
    • 还有一件事.. click 事件中返回的位置没有正确更新。它给了我错误的位置关于这个的任何想法?
    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2014-02-16
    相关资源
    最近更新 更多