RecyclerView布局文件引发异常:在项目布局中找不到ID为...:id / recyclerView的视图

时间:2018-09-17 00:45:05

标签: android android-layout xamarin android-recyclerview xamarin.android

我目前正在尝试在Xamarin.Android中实现我的第一个RecyclerView。

在我的主布局文件中,我有一个DrawerLayout,其中包含一个FrameLayout和一个ListView。我想要实现的是,每次单击ListView中的项目时,都会使用FragmentManager加载包含RecyclerView的Fragment。

我面临的问题是,每次从Fragment中的OnCreateView返回时,都会遇到上述异常。

最让我困惑的是,当我逐步遍历OnCreateView中的代码时,FindViewById不会引发异常,并且似乎正确地填充了recyclerView。

任何帮助将不胜感激。谢谢。

DiscoverNew.axml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</RelativeLayout>

DiscoverNewFragment.cs

public class DiscoverNewFragment : Fragment
    {
        RecyclerView recyclerView;
        IngredientsAdapter ingredientsAdapter;
        List<Ingredients> listOfIngredients;

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var view = inflater.Inflate(Resource.Layout.DiscoverNew, container, false);
            recyclerView = view.FindViewById(Resource.Id.recyclerView) as RecyclerView;
            var layoutMan = new GridLayoutManager(recyclerView.Context, 2, GridLayoutManager.Vertical, false);
            recyclerView.SetLayoutManager(layoutMan);
            listOfIngredients = IngredientsData.LoadIngredients(this.Activity);
            ingredientsAdapter = new IngredientsAdapter(listOfIngredients);
            recyclerView.SetAdapter(ingredientsAdapter);
            return view;
        }
    }

MainActivity.cs

    [Activity(Label = "MyApp", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        . . . 
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.Main);
             . . .
            OnMenuItemClick(0);  // Load Fragment 0 at startup    
        }    
        . . .    
        void OnMenuItemClick(int position)
        {         
            base.FragmentManager.BeginTransaction().Replace(Resource.Id.frameLayout, new DiscoverNewFragment()).Commit();
            this.Title = "Discover";
            drawerLayout.CloseDrawer(drawerListView);    
        }
    }

注意:我从MainActivity.cs中省略了一些与抽屉布局设置有关的代码

1 个答案:

答案 0 :(得分:0)

我刚刚通过将以下nuget软件包从27.0.2.1版本还原到26.1.0.1版本来解决了此问题:-xamarin.android.support.design 我知道这比解决方案更能解决问题,但是在尝试了不同的方法之后,这似乎是唯一可行的选择。