EventHandling в TreeView (Xamarin Android) - PullRequest
0 голосов
/ 14 мая 2018

Я разработал древовидную структуру в 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);
    }      
 }
}

1 Ответ

0 голосов
/ 16 мая 2018

Если вы хотите добавить событие нажатия на 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);

Пожалуйста, обратитесь к this .

И я также предоставлю демонстрацию на github

...