listview - 访问 xamarin.android 中列表视图行内的文本视图
问题描述
我创建了一个列表视图,每行包含 5 个文本视图。现在我想点击最后一个文本视图并重定向到一个新页面。我的问题是我不知道如何访问文本视图。我尝试在我的自定义适配器中这样做:
var t = view.FindViewById<TextView>(Resource.Id.textView5);
t.Click +=delegate {
Android.Widget.Toast.MakeText(context, t.Text, Android.Widget.ToastLength.Short).Show();
};
我用吐司只是为了看看这个功能是否有效。但它没有。当我运行应用程序并单击 textview 时,我一直在敬酒,但并没有停止。这样做的正确方法是什么?提前非常感谢。
解决方案
此问题与列表视图项重用有关,请创建以下类。
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 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;
}
这是一个类似的线程,您可以参考它:
https://forums.xamarin.com/discussion/9244/single-click-on-button-invoking-multiple-clicks
推荐阅读
- c - 在 main 外部定义的函数内分配数组
- javascript - 2018 年我应该使用哪个版本的 JavaScript 来开发新的应用程序?
- protractor - 如何知道回调休息呼叫量角器的响应
- cucumber - 如何跳过黄瓜中场景的执行?
- javascript - 访问 Backbone 集合属性
- linux - 即使作为 root 用户也无法在 Fedora 中进行 yum 安装
- javascript - MongoDB/Express:为什么 Array.includes 返回 false 而不是 true?
- java - 没有命名 EntityManager 的持久性提供程序 - 我做错了什么?
- c - 用 contiki 测量时间(以时钟滴答为单位)
- php - 如何让 PhpStorm 了解 Doctrine 存储库的类型