首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为一个片段添加多个父活动

为一个片段添加多个父活动
EN

Stack Overflow用户
提问于 2016-04-22 10:10:56
回答 1查看 833关注 0票数 4

我有一个片段,它需要在用户登录和用户是注销时访问。因此,我需要一个片段两个活动使用。我使用mvvmcross 4.1与Xamarin和Monodroid,并为片段添加了新添加的多父特性。我不确定我是否正确地实现了它。

不想使用ViewPager,因为在查看屏幕时会加载相邻的屏幕。

当我尝试导航到具有两个父活动的片段时,会得到Android.Content.ActivityNotFoundException: Unable to find explicit activity class {za.co.app.something.example/examplepcl.droid.views.GetHelpView}; have you declared this activity in your AndroidManifest.xml?错误。

我一直在看GitHub:https://github.com/MvvmCross/MvvmCross-AndroidSupport/tree/master/Samples/Example.Droid上的示例项目

请评论并告诉我是否应该用我的基类和viewModels的代码更新我的问题。

My片段:

代码语言:javascript
复制
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using MvvmCross.Binding.BindingContext;
using ExamplePCL.Droid.ModalPopups;
using ExamplePCL.ViewModels;
using MvvmCross.Droid.Shared.Attributes;

namespace ExamplePCL.Droid.Views
{
    [MvxFragment(typeof(LoggedOutTabViewModel), Resource.Id.content_frame)]
    [MvxFragment(typeof(LoggedInTabViewModel), Resource.Id.content_frame)]
    [Register("examplepcl.droid.views.GetHelpView")]
    public class GetHelpView : BaseFragment<GetHelpViewModel>
    {
        protected override int FragmentId => Resource.Layout.gethelp;

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var view = base.OnCreateView(inflater, container, savedInstanceState);

            return view;
        }
    }
}

My Activities:

活动1:

代码语言:javascript
复制
using Android.App;
using Android.OS;
using Android.Views;
using ExamplePCL.ViewModels;
using Android.Content.PM;
using Android.Support.V4.Widget;
using ExamplePCL.Droid.Fragments;
using Android.Support.V4.View;
using ExamplePCL.Droid.Interfaces;
using MvvmCross.Droid.Support.V7.Fragging.Caching;
using Android.Widget;
using Android.Support.Design.Widget;
using Android.Support.V4.Content;

namespace ExamplePCL.Droid.Views
{
    [Activity(
        Theme = "@style/AppTheme",
        LaunchMode = LaunchMode.SingleTask,
        ScreenOrientation = ScreenOrientation.Portrait,
        WindowSoftInputMode = SoftInput.AdjustResize | SoftInput.StateAlwaysHidden,
        Name = "examplepcl.droid.views.LoggedInTabView")]
    public class LoggedInTabView : BaseLoggedCachingFragmentActivity<LoggedInTabViewModel>, IDrawerActivity
    {
        TabLayout _globalNavTabLayout;
        int _previousTab;

        #region Activity LifeCycle Handling

        protected override int ContentLayoutId => Resource.Layout.loggedin_base_view;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            if (bundle == null)
                ViewModel.ShowMenu();

            // Setup tabs
            _globalNavTabLayout = FindViewById<TabLayout>(Resource.Id.tabs);
            SetupTabLayout();
        }

        protected override void OnPause()
        {
            _globalNavTabLayout.TabReselected -= GlobalNavTabLayout_TabReselected;
            _globalNavTabLayout.TabSelected -= GlobalNavTabLayout_TabSelected;
            base.OnPause();
        }

        protected override void OnResume()
        {
            _globalNavTabLayout.TabReselected += GlobalNavTabLayout_TabReselected;
            _globalNavTabLayout.TabSelected += GlobalNavTabLayout_TabSelected;
            base.OnResume();
        }

        #endregion

        #region Menu and Toolbar Option Handling

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
                case Android.Resource.Id.Home:
                    DrawerLayout.OpenDrawer(GravityCompat.Start);
                    return true;
            }
            return base.OnOptionsItemSelected(item);
        }

        #endregion

        #region Tab Layout

        void GlobalNavTabLayout_TabSelected(object sender, TabLayout.TabSelectedEventArgs e)
        {
            int tabPosition = e.Tab.Position;

            SetTabPosition(tabPosition);
        }

        void GlobalNavTabLayout_TabReselected(object sender, TabLayout.TabReselectedEventArgs e)
        {
            int tabPosition = e.Tab.Position;

            SetTabPosition(tabPosition);
        }

        void SetupTabLayout()
        {
            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(0).SetCustomView(Resource.Layout.tab_layout_loggedin);
            _globalNavTabLayout.GetTabAt(0).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.icon_my_bill);

            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(1).SetCustomView(Resource.Layout.tab_layout_loggedin);
            _globalNavTabLayout.GetTabAt(1).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.ico_my_products);

            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(2).SetCustomView(Resource.Layout.tab_layout_loggedin);
            _globalNavTabLayout.GetTabAt(2).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.btn_launchpadimage);

            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(3).SetCustomView(Resource.Layout.tab_layout_loggedin);
            _globalNavTabLayout.GetTabAt(3).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.ico_get_help);

            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(4).SetCustomView(Resource.Layout.tab_layout_loggedin);
            _globalNavTabLayout.GetTabAt(4).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.ico_track);

            //Bring the TabLayout to the front so that it overlays the main content in the
            var tabLayout = FindViewById<LinearLayout>(Resource.Id.linlay_appbar_globalnav);
            tabLayout.BringToFront();

            SetTabPosition(2);
        }

        void SetTabPosition(int index)
        {
            switch (index)
            {
                case 0:
                    ViewModel.ShowMyBillScreenCommand.Execute();
                    break;
                case 1: // My Products
                    ViewModel.ShowMyProductsScreenCommand.Execute();
                    break;
                case 3: // Help
                    ViewModel.ShowGetHelpScreenCommand.Execute();
                    break;
                case 4: // Tracks
                    ViewModel.ShowTrackScreenCommand.Execute();
                    break;
                case 2: // QuickLinks
                    ViewModel.ShowQuickLinksScreenCommand.Execute();
                    break;
            }
        }

        #endregion
    }
}

活动2:

代码语言:javascript
复制
using Android.App;
using Android.OS;
using Android.Content.PM;
using ExamplePCL.ViewModels;
using Android.Support.V4.View;
using MvvmCross.Droid.Support.V7.Fragging.Caching;
using ExamplePCL.Droid.Fragments;
using Android.Support.Design.Widget;
using Android.Widget;
using Android.Views;
using Android.Util;
using Android.Content.Res;
using Android.Support.V4.Content;
using System.Threading.Tasks;

namespace ExamplePCL.Droid.Views
{
    [Activity(
        Theme = "@style/AppTheme",
        LaunchMode = LaunchMode.SingleTask,
        ScreenOrientation = ScreenOrientation.Portrait,
        Name = "examplepcl.droid.views.LoggedOutTabView")]
    public class LoggedOutTabView : BaseLoggedCachingFragmentActivity<LoggedOutTabViewModel>
    {
        TabLayout _globalNavTabLayout;
        int _previousTab;

        #region Activity LifeCycle Handling

        protected override int ContentLayoutId => Resource.Layout.loggedout_base_view;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            if (bundle == null)
                ViewModel.ShowMenu();

            // Setup tabs
            _globalNavTabLayout = FindViewById<TabLayout>(Resource.Id.tabs);
            SetupTabLayout();
        }

        protected override void OnPause()
        {
            _globalNavTabLayout.TabReselected -= GlobalNavTabLayout_TabReselected;
            _globalNavTabLayout.TabSelected -= GlobalNavTabLayout_TabSelected;

            base.OnPause();
        }

        protected override void OnResume()
        {
            _globalNavTabLayout.TabReselected += GlobalNavTabLayout_TabReselected;
            _globalNavTabLayout.TabSelected += GlobalNavTabLayout_TabSelected;
            base.OnResume();
        }

        #endregion

        #region Tab Layout

        void GlobalNavTabLayout_TabSelected(object sender, TabLayout.TabSelectedEventArgs e)
        {
            _globalNavTabLayout.TabSelected -= GlobalNavTabLayout_TabSelected;
            _globalNavTabLayout.TabReselected -= GlobalNavTabLayout_TabReselected;

            int tabPosition = e.Tab.Position;

            SetTabPosition(tabPosition);

            _globalNavTabLayout.TabSelected += GlobalNavTabLayout_TabSelected;
            _globalNavTabLayout.TabReselected += GlobalNavTabLayout_TabReselected;
        }

        void GlobalNavTabLayout_TabReselected(object sender, TabLayout.TabReselectedEventArgs e)
        {
            _globalNavTabLayout.TabReselected -= GlobalNavTabLayout_TabReselected;

            int tabPosition = e.Tab.Position;

            SetTabPosition(tabPosition);

            _globalNavTabLayout.TabReselected += GlobalNavTabLayout_TabReselected;
        }


        public void SetupTabLayout()
        {
            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(0).SetCustomView(Resource.Layout.tab_layout);
            _globalNavTabLayout.GetTabAt(0).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.ico_get_help);

            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(1).SetCustomView(Resource.Layout.tab_layout);
            _globalNavTabLayout.GetTabAt(1).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.ico_track);

            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(2).SetCustomView(Resource.Layout.tab_layout);
            _globalNavTabLayout.GetTabAt(2).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.btn_launchpadimage);

            _globalNavTabLayout.AddTab(_globalNavTabLayout.NewTab());
            _globalNavTabLayout.GetTabAt(3).SetCustomView(Resource.Layout.tab_layout);
            _globalNavTabLayout.GetTabAt(3).CustomView.FindViewById<ImageView>(Resource.Id.tab_icon).SetImageResource(Resource.Drawable.ico_lock);

            //Bring the TabLayout to the front so that it overlays the main content
            var tabLayout = FindViewById<LinearLayout>(Resource.Id.linlay_appbar_globalnav);
            tabLayout.BringToFront();

            SetTabPosition(2);
        }

        async void SetTabPosition(int index)
        {
            switch (index)
            {
                case 0: // Get Help
                    ViewModel.ShowGetHelpScreenCommand.Execute();
                    break;
                case 1: // Track
                    ViewModel.ShowTrackScreenCommand.Execute();
                    break;
                case 2: // Quick Links
                    ViewModel.ShowQuickLinksScreenCommand.Execute();
                    break;
                case 3: // Login
                    ViewModel.ShowLoginScreenCommand.Execute();
                    break;
            }
        }

        #endregion
    }
}

更新:

问题似乎与我使用库MvvmCross.Droid.Shared.Attributes的方式有关。如果我只使用一个属性([MvxFragment(typeof(LoggedOutTabViewModel), Resource.Id.content_frame)]),我仍然会得到相同的错误。

但是,如果我只使用一个属性的库MvvmCross.Droid.Support.V7.Fragging.Attributes,那么就不会出现错误。但是很明显,我不能使用这个库,因为我需要多个活动的两个属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-23 21:45:38

尝试从项目中删除MvvmCross.Droid.Support.V7.Fragging包,因为在MVX4.1.4发行版时已经是脱脂包了。它现在是MvvmCross.Droid.Shared包的一部分,您可以从nuget Link中获得它。安装这两个包会导致问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36790931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档