xamarin.android - TreeView 中的事件处理(Xamarin android)
问题描述
我在 xamarin android 中开发了一个树视图。我按照这个链接开发了下面的示例。
在 MyHolder.cs 中有一个名为 CreateNodeView() 的方法,它显示所有节点。在这里,当我单击 ParentNode 时,控件将转到 ParentView_Click()[Event Handler]。我面临的问题是从 ParentView_Click() 返回后,ParentNode 以下的级别没有显示。
非常感谢任何帮助。
MyHolder.cs:
namespace XamarinTreeView
{
public class MyHolder : TreeNode.BaseNodeViewHolder
{
private Context mcontext;
TextView level2_View, child_View, parent_View;
public MyHolder(Context context) : base(context)
{
mcontext = context;
}
public override View CreateNodeView(TreeNode p0, Java.Lang.Object p1)
{
var inflater = LayoutInflater.FromContext(mcontext);
var view = inflater.Inflate(Resource.Layout.itemview, null, true);
level2_View = view.FindViewById<TextView>(Resource.Id.itemtv);
child_View = view.FindViewById<TextView>(Resource.Id.itemtv1);
parent_View = view.FindViewById<TextView>(Resource.Id.parent_tv);
// tv.Click += Tv_Click;
var item = p1 as TreeItem;
if (item.text == " ParentNode" || item.text == " Child1")
{
var view2 = inflater.Inflate(Resource.Layout.parentview, null, true);
parent_View = view2.FindViewById<TextView>(Resource.Id.parent_tv);
parent_View.Text = item.text;
parent_View.Click += ParentView_Click;
return view2;
}
if (item.text == " Level3-1" || item.text == " Level3-2" || item.text == " Level4")
{
var view1 = inflater.Inflate(Resource.Layout.childview, null, true);
child_View = view1.FindViewById<TextView>(Resource.Id.itemtv1);
child_View.Text = item.text;
return view1;
}
else
{
level2_View.Text = item.text;
return view;
}
}
private void ParentView_Click(object sender, EventArgs e)
{
int iLeft = Resource.Drawable.plus;
parent_View.SetCompoundDrawablesWithIntrinsicBounds(iLeft, 0, 0, 0);
}
}
}
解决方案
如果要在 上添加点击事件Node
,可以使用TreeNode.setClickListener(TreeNodeClickListener listener);
.
TreeNode.ITreeNodeClickListener
为您实施MainActivity
:
public void OnClick(TreeNode p0, Object p1)
{
//do something
var view = parent.ViewHolder.View as View;
int iLeft = Resource.Drawable.dapao;
TextView tv = view.FindViewById<TextView>(Resource.Id.itemtv);
tv.SetCompoundDrawablesWithIntrinsicBounds(iLeft, 0, 0, 0);
tv.Text = "adfasdf";
Toast.MakeText(this, "111", ToastLength.Short).Show();
}
在OnCreate
方法中添加监听器:
parent.SetClickListener(this);
请参考这个。
而且我还在github上提供了一个demo
推荐阅读
- google-cloud-platform - 大查询分析功能未给出预期结果
- r - rmarkdown 标题编号/参考与下划线一起使用?
- mysql - MySQL COUNT IF 与 GROUP BY
- javascript - 给定 JavaScript 中的 URL,我如何下载视频?
- amazon-web-services - 无法让 API 网关与私有 VPC 链接一起工作(在网络负载均衡器后面到 Fargate 容器)
- python - 尝试使用 Python 将 JSON 文件中的值插入 MySQL,为什么我的表变为空?
- django-models - 如何计算与 Django 的深层关系字段?
- python - 从数据库更新 ScrollView 中的按钮文本
- c# - Implement operator overrides / Equatable
for all primitive number datatypes at once? - javascript - 从 Spotify API 请求 reshresh_token 时,如何解决“错误:invalid_grant Invalid authentication code”?