Как открыть новый фрагмент / макет с помощью Bottomnavigation onClick ListView - PullRequest
0 голосов
/ 30 октября 2019

Я написал приложение с нижней навигацией и пятью вкладками. Работает без проблем. На моей второй вкладке у меня есть ListView, и когда пользователь щелкает по нему, он должен открыть другой фрагмент / макет.

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 или, если это нормально, загрузитьэто из BaseAdapter:

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

Если чего-то не хватает ... Скажите, я могу отредактировать свой пост.

1 Ответ

1 голос
/ 05 ноября 2019

Я написал демо об этом. Прежде всего, это запущенный 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...