Переключение между «вкладками» (через нижнюю навигацию) - мерцание, какие советы? - PullRequest
0 голосов
/ 05 мая 2020

В настоящее время я пишу приложение для обмена сообщениями для своей гильдии, на данный момент я дошел до него, я могу войти в систему и переключаться между разными вкладками, в которых перечислены текущие фиктивные заголовки сообщений (например, шепотное имя). Позже моя цель состоит в том, чтобы, нажав на одно из сообщений, вы могли отвечать / читать сообщения в стиле WhatsApp (здесь также приветствуются советы).

Но моя текущая проблема заключается в том, что я использую меню навигации «Нижнее» . В настоящее время я меняю вкладки новыми действиями. Но всякий раз, когда я нажимаю кнопку, экран "мерцает", как будто происходит перезапуск всего приложения.

Есть ли способ переключить "плавную" верхнюю часть приложения, в то время как меню всегда остается красиво внизу ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.Design.Widget;
using Android.Views;
using Android.Widget;

namespace GuildMaster
{
    [Activity(Label = "Whisper")]
    public class Whisper : Activity, BottomNavigationView.IOnNavigationItemSelectedListener
    {
        private ListView whisperlist;
        private List<string> itemlist;
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);
            BottomNavigationView navigation = FindViewById<BottomNavigationView>(Resource.Id.navigation);
            navigation.SetOnNavigationItemSelectedListener(this);

            whisperlist = FindViewById<ListView>(Resource.Id.whisper);
            itemlist = new List<string>();
            itemlist.Add("Tim");
            itemlist.Add("Tom");           
            ArrayAdapter<string> whisper = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, itemlist);
            whisperlist.Adapter = whisper;
            whisperlist.ItemClick += Listnames_ItemClick;
            // Create your application here
        }
        public void Listnames_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            Toast.MakeText(this, e.Position.ToString(), ToastLength.Long).Show();
        }

        public bool OnNavigationItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
                case Resource.Id.navigation_home:
                    StartActivity(typeof(Whisper));

                    return true;
                case Resource.Id.navigation_dashboard:
                    StartActivity(typeof(Guild));

                    return true;
                case Resource.Id.navigation_notifications:
                    StartActivity(typeof(Other));

                    return true;

            }
            return false;
        }
    }
}

1 Ответ

0 голосов
/ 06 июля 2020

вам следует попробовать работать с фрагментами вместо действий с нижней навигацией, работа с активностью означает, что вам нужно запустить совершенно новый экран с новой нижней навигацией, если это то, что вы делаете, то это совершенно нормально " мерцание "при этом

в качестве решения, используйте действие с xml, которое содержит представление фрагмента и представление нижней навигации, а когда вы переключаетесь с нижней навигации в своей деятельности, переключите загруженные фрагменты в представлении фрагмента.

это можно сделать разными методами, но я бы посоветовал проверить компонент навигации от Google, так как он также будет обрабатывать за вас backstack.

...