访问xamarin.android中listview行内的textview

访问xamarin.android中listview行内的textview,listview,xamarin.android,Listview,Xamarin.android,我创建了一个列表视图,每行包含5个文本视图。现在我想点击最后一个文本视图,并被重定向到一个新页面。我的问题是我不知道如何访问textview。我尝试在自定义适配器中执行此操作: var t = view.FindViewById<TextView>(Resource.Id.textView5); t.Click +=delegate { Android.Widget.Toast.MakeText(context, t.Text,

我创建了一个列表视图,每行包含5个文本视图。现在我想点击最后一个文本视图,并被重定向到一个新页面。我的问题是我不知道如何访问textview。我尝试在自定义适配器中执行此操作:

var t = view.FindViewById<TextView>(Resource.Id.textView5);
            t.Click +=delegate {
                Android.Widget.Toast.MakeText(context, t.Text, Android.Widget.ToastLength.Short).Show();
              

            };
var t=view.findviewbyd(Resource.Id.textView5);
t、 单击+=委派{
Android.Widget.Toast.MakeText(context,t.Text,Android.Widget.ToastLength.Short).Show();
};
我用烤面包片只是想看看这个功能是否有效。但事实并非如此。当我运行应用程序并点击文本视图时,我不断地得到祝酒词,它没有停止。正确的方法是什么?
非常感谢。

此问题与listview项目重用有关,请创建以下类

 public class LocalOnclickListener : Java.Lang.Object, View.IOnClickListener
    {
        public void OnClick(View v)
        {
            HandleOnClick();
        }
        public System.Action HandleOnClick { get; set; }
    }
然后在GetView方法中,像下面的代码一样使用它。它将使单击事件在TextView中仅执行一次

 public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View view = convertView;
            if (view == null) // no view to re-use, create new
                view = mainActivity.LayoutInflater.Inflate(Resource.Layout.layout1, null);
          
            TextView textView = view.FindViewById<TextView>(Resource.Id.textView1);
            textView.Text = items[position];
         

            var local = new LocalOnclickListener();
            local.HandleOnClick = () =>
            {
                Toast.MakeText(mainActivity, "click", ToastLength.Short).Show();
            };

            textView.SetOnClickListener(local);
            return view;
        }
public override View GetView(int位置、视图转换视图、视图组父视图)
{
视图=转换视图;
如果(view==null)//没有要重用的视图,则创建新的
view=mainActivity.LayoutFlater.Inflate(Resource.Layout.layout1,null);
TextView TextView=view.FindViewById(Resource.Id.textView1);
Text=items[位置];
var local=new LocalOnclickListener();
local.HandleOnClick=()=>
{
Toast.MakeText(mainActivity,“click”,ToastLength.Short).Show();
};
SetOnClickListener(本地);
返回视图;
}
或者您可以简单地使用以下代码

 public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View view = convertView;
            if (view == null) // no view to re-use, create new
                view = mainActivity.LayoutInflater.Inflate(Resource.Layout.layout1, null);
            view.FindViewById<TextView>(Resource.Id.My_textView1).Text = items[position];
            TextView textView = view.FindViewById<TextView>(Resource.Id.textView1);
            textView.Text = items[position];
            // textView.Click += TextView_Click;


            if (!textView.HasOnClickListeners)
            {
                textView.Click += (o, e) =>
                {
                    Toast.MakeText(mainActivity, "click", ToastLength.Short).Show();
                };
            }


           
            return view;
        }
public override View GetView(int位置、视图转换视图、视图组父视图)
{
视图=转换视图;
如果(view==null)//没有要重用的视图,则创建新的
view=mainActivity.LayoutFlater.Inflate(Resource.Layout.layout1,null);
view.FindViewById(Resource.Id.My_textView1).Text=items[position];
TextView TextView=view.FindViewById(Resource.Id.textView1);
Text=items[位置];
//textView.Click+=textView\u Click;
如果(!textView.HasOnClickListeners)
{
文本视图。单击+=(o,e)=>
{
Toast.MakeText(mainActivity,“click”,ToastLength.Short).Show();
};
}
返回视图;
}
下面是一个类似的线程,您可以参考它: