I have developed a treeview in xamarin android.I followed this Link to develop the below sample.
In MyHolder.cs there is a method called CreateNodeView() which is displaying all the nodes. Here when I am clicking on the ParentNode the control is going to ParentView_Click()[Event Handler]. The problem that I am facing is after returning from ParentView_Click() the levels which are below ParentNode are not displaying.
Any help is highly appreciated.
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);
}
}
}
If you want to add a click event on the Node
, you can use TreeNode.setClickListener(TreeNodeClickListener listener);
.
Implement the TreeNode.ITreeNodeClickListener
for you 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();
}
In the OnCreate
method add the listener:
parent.SetClickListener(this);
Please refer to this.
And I also provide a demo on github