如何使用Bottomnavigation onclick ListView打开新的片段/布局

问题描述 投票:0回答:1

我编写了一个带有底部导航和五个标签的应用。它可以正常工作。在第二个选项卡上,我有一个ListView,当用户单击它时,它应该打开另一个Fragment / Layout。

1。要创建选项卡的视图,我创建了一个MenuBase片段:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            string title = (string) Arguments.Get("title");
            View view = null;

            switch (title)
            {
                case "T1":
                    break;
                case "Tutorial":
                    FragActivity.Tutorial tutorial = new FragActivity.Tutorial();
                    view = tutorial.createTutorialAction(inflater, container, savedInstanceState);
                    break;
                case "T3":
                    break;
                case "T4":
                    break;
                case "T5":
                    break;
            }

            return view;
        }

2。这是我的CreateTutorial函数:

public View createTutorialAction(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            List<TutorialItem> tutorialItems = new List<TutorialItem>();

            View view = inflater.Inflate(Resource.Layout.Tutorial, container, false);
            ListView listView = view.FindViewById<ListView>(Resource.Id.tutorialListView);

            int resID = (int)typeof(Resource.Drawable).GetField("eventPic").GetValue(null);
            for (int i = 0; i < 10; i++)
            {
                tutorialItems.Add(new TutorialItem()
                {
                    ImgName = resID,
                    Text = "Tutorial Nr " + i,
                });
            }

            listView.Adapter = new TutorialAdapter(this, tutorialItems, container, inflater);

            return view;
        }

3。创建ListView:

public class TutorialAdapter : BaseAdapter<TutorialItem>
    {
        List<TutorialItem> items;
        Activity context;
        ViewGroup container;
        LayoutInflater inflater;
        View view;

        public TutorialAdapter(Activity context, List<TutorialItem> items, ViewGroup container, LayoutInflater inflater) : base()
        {
            this.context = context;
            this.items = items;
            this.container = container;
            this.inflater = inflater;
        }
        public override long GetItemId(int position)
        {
            return position;
        }
        public override TutorialItem this[int position]
        {
            get { return items[position]; }
        }
        public override int Count
        {
            get { return items.Count; }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = items[position];
            view = convertView;

            if (view == null) // no view to re-use, create new
                view = this.inflater.Inflate(Resource.Layout.Tutorial_Profile, this.container, false);
            view.FindViewById<ImageView>(Resource.Id.imgTutorialDescribe).SetImageResource(item.ImgName);
            view.FindViewById<TextView>(Resource.Id.txtTutorialDescribe).Text = item.Text;
LinearLayout profile = view.FindViewById<LinearLayout>(Resource.Id.tutorialProfileLayout);
            profile.Tag = item.Text;
            profile.Click += OnTutorialProfileClicked;
            return view;
        }
     }

到目前为止一切正常...但是我不知道该如何使用Bottomnavigation转到新的Layout / Fragment,或者是否可以从BaseAdapter加载它:

public void OnTutorialProfileClicked(object sender, EventArgs e)
        {
            //Load another Fragment
        }

如果缺少某些内容,请告诉我,我可以编辑我的帖子。

android android-fragments xamarin xamarin.android
1个回答
1
投票

我为此编写了一个演示。首先,这是一个正在运行的GIF。当我单击listview中的项目时,它将打开一个新的片段以显示项目的文本。

enter image description here

这里是我的演示(如果在生成此错误时有关于cannot found the Resource.id.xxxx的错误,请忽略它)。https://github.com/851265601/Fragment-and-Viewpager

我使用ViewPager和Fragement来获得结果。

但是我们应该为此适配器更改另一个新成就。如果我们要有新的片段,则应删除旧的片段,然后给出新的片段和该片段的NotifyDataSetChanged

这里是一个完整的解释。https://stackoverflow.com/a/9127423/10627299

© www.soinside.com 2019 - 2024. All rights reserved.