从正常活动开始MvxActivity?

时间:2013-04-29 14:24:59

标签: android xamarin.android mvvmcross start-activity

特别是ViewModels上的Views之间的导航看起来像:

ShowViewModel<InfoViewModel>();

或正常活动之间:

context.StartActivity(typeof(InfoActivity));

我现在遇到的问题(实际上我在我最近的一个项目中通过使用Tinymessenger解决了这个问题 - 它是一个用于松耦合通信的事件聚合器/信使)但我想知道是否其他方式!

我正在创建一个选项菜单:

public abstract class BaseActivityWithoutTabs<T> : MvxActivity where T : class, IMvxViewModel
{
        public override bool OnCreateOptionsMenu(IMenu menu)
        {
            return ActivitiesHelper.CreateOptionsMenu(menu);
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            return ActivitiesHelper.CreateOnOptionsItemSelectedEvent(item, this);
        }
}

InfoActivity来自此BaseActivityWithoutTabs

在ActivitiesHelper类中(来自上面的代码)我正在创建菜单和事件:

public class ActivitiesHelper
{
    private const int einstellungenItemId = 0;
    private const int infoItemId = 1;

    public static bool CreateOptionsMenu(IMenu menu)
    {
        // GroupId, ItemId, OrderId
        menu.Add(0, einstellungenItemId, 0, "Einstellungen").SetIcon(Android.Resource.Drawable.IcMenuManage);
        menu.Add(0, infoItemId, 1, "Info").SetIcon(Android.Resource.Drawable.IcMenuInfoDetails);
        return true;
    }

    public static bool CreateOnOptionsItemSelectedEvent(IMenuItem item, Context context)
    {
        var id = item.ItemId + 1; // (Id is zero-based :)
        if (id == 1) // First Item
        {
            context.StartActivity(typeof(SettingsShowActivity));
        }
        else if (id == 2) // Second Item
        {
            context.StartActivity(typeof(InfoActivity)); //doesn't work...
        }
        return true;
    }
}

如您所见,我在此处“StartActivity”..它适用于第一个“SettingsShowActivity”,但这是一个 PreferenceActivity ,所以没有理由它会失败。问题是,我想在这里开始InfoActivity(正如你在代码中看到的那样 - 第二项),这不起作用。它会打开活动但列表不会被填充。

但是,如果我在我的项目中转到ViewModel并调用:ShowViewModel<InfoViewModel>();它可以正常工作,但这是在那个地方(在ActivitiesHelper类中)不可用/可能!

public class InfoViewModel : MvxViewModel
{
    public InfoViewModel()
    {
        Info info = new Info();
        info.Key = "ITS A KEYY";
        info.Value = "here we got a value";
        ObservableCollection<Info> asd = new ObservableCollection<Info>();
        asd.Add(info);
        Infos = asd;
    }

    private ObservableCollection<Info> infos = new ObservableCollection<Info>();
    public ObservableCollection<Info> Infos
    {
        get
        {
            return infos;
        }
        set
        {
            infos = value;
            RaisePropertyChanged(() => Infos);
        }
    }
}

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我不知道你在说什么。说真的,你刚刚在屏幕上丢了很多东西。

我认为你已经让自己感到很困惑 - 祝你好运,想要找出你已经完成的事情。

一个基本答案是,您可以通过以下方式导航到基于Mvx的活动:

但是,我认真地建议你走出目前的混乱,并考虑更清洁的申请流程。