首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fragment.inflate找不到类

fragment.inflate找不到类
EN

Stack Overflow用户
提问于 2015-08-27 04:05:48
回答 1查看 529关注 0票数 1

我正在我的安卓应用程序中使用ViewPager实现一个选项卡式视图,使用本教程中的http://blog.ostebaronen.dk/2013/07/fragments-and-viewpager-with-mvx.html

在做了所有告诉过的事情之后,当android试图膨胀片段时,它会抛出一个异常。

无法实例化片段moviehall.client.android.views.fragments.AllMoviesView:,请确保类名存在,是公共的,并且具有公共的空构造函数。

经过一些研究后,我发现的所有地方都暗示问题是在java中没有检测大写的名称空间,但是正如您在错误中所看到的,它是正确的大小写。我遗漏了什么?

下面是我用来膨胀片段的代码:

代码语言:javascript
复制
public override Fragment GetItem(int position)
{
    var frag = Fragments.ElementAt(position);
    var fragment = Fragment.Instantiate(_context,
        FragmentJavaName(frag.FragmentType));
    ((MvxFragment)fragment).DataContext = frag.ViewModel;
    return fragment;
}

这是FragmentInfo类

代码语言:javascript
复制
public class FragmentInfo
{
    public string Title { get; set; }
    public Type FragmentType { get; set; }
    public IMvxViewModel ViewModel { get; set; }
}

这是我用来将名称空间转换为小写的方法。

代码语言:javascript
复制
protected virtual string FragmentJavaName(Type fragmentType)
{
    var namespaceText = fragmentType.Namespace ?? "";
    if (namespaceText.Length > 0)
        namespaceText = namespaceText.ToLowerInvariant() + ".";
    return namespaceText + fragmentType.Name;
}

最后,这是它找不到的类

代码语言:javascript
复制
namespace MovieHall.Client.Android.Views.Fragments
{    
    [Activity(Label = "Movies")]
    public class AllMoviesView : MvxFragment
    {
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var ignore =  base.OnCreateView(inflater, container, savedInstanceState);
            return this.BindingInflate(Resource.Layout.all_movies, null);
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 14:32:27

在XamallyAndroid5.0中,名称的定义方式发生了巨大的变化。有关更多信息,请参见:Naming

您需要做的是指定要在Java端定义的实际名称。使用寄存器属性。

代码语言:javascript
复制
namespace MovieHall.Client.Android.Views.Fragments
{    
    [Register("moviehall.client.android.views.fragments.AllMoviesView")]
    public class AllMoviesView : MvxFragment
    {
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var ignore =  base.OnCreateView(inflater, container, savedInstanceState);
            return this.BindingInflate(Resource.Layout.all_movies, null);
        }
    }
}

注意:我不知道为什么使用Activity属性,因为这是一个片段。

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

https://stackoverflow.com/questions/32240515

复制
相关文章

相似问题

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