【问题标题】:Recyclerview in Fragments, skipping layout no adapter attached片段中的 Recyclerview,跳过没有附加适配器的布局
【发布时间】:2019-09-01 15:53:00
【问题描述】:

我正在尝试设置 Recyclerview,但在 initRecycleView() 上不断出现错误,提示 No Adapter Attached Skipping Layout。

我尝试为 RecyclerView 调用一个新的构造函数

RecyclerView recyclerView = new RecyclerView(getContext());

这将导致跳过布局,但如果我删除它并尝试这个

RecyclerView recyclerView = getView().findViewById(R.id.recyclerView);

这将导致调用虚方法空对象引用

public class HomeFragment extends Fragment {

    private static final String TAG = "HomeFragment";

    //Vars
    private ArrayList<String> mImage = new ArrayList<>();
    private ArrayList<String> mTitle = new ArrayList<>();
    private ArrayList<String> mDesc = new ArrayList<>();

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        Log.d(TAG, "onCreateView: started");

        initBitmapImages();
        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    private void initBitmapImages(){
        Log.d(TAG, "initBitmapImages: preparing bitmaps");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 1");
        mDesc.add("This is foto 1");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 2");
        mDesc.add("This is foto 2");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 3");
        mDesc.add("This is foto 3");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 4");
        mDesc.add("This is foto 4");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 5");
        mDesc.add("This is foto 5");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 6");
        mDesc.add("This is foto 6");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 7");
        mDesc.add("This is foto 7");

        mImage.add("https://i.redd.it/j6myfqglup501.jpg");
        mTitle.add("Foto 8");
        mDesc.add("This is foto 8");

        initRecyclerView();
    }

    private void initRecyclerView(){
        Log.d(TAG, "initRecyclerView: init recyclerView");

         RecyclerView recyclerView = getView().findViewById(R.id.recyclerView);
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(mImage,mTitle,mDesc,getContext());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    }
}

我期望的实际输出是在布局中我可以输出我创建的回收视图:(

【问题讨论】:

    标签: java android android-recyclerview android-studio-3.0


    【解决方案1】:

    试试这个可能会有所帮助

    public class HomeFragment extends Fragment {
    
        private static final String TAG = "HomeFragment";
    
        //Vars
        private ArrayList<String> mImage = new ArrayList<>();
        private ArrayList<String> mTitle = new ArrayList<>();
        private ArrayList<String> mDesc = new ArrayList<>();
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    
            // initialize container view
            View view = inflater.inflate(R.layout.fragment_home, container, false);
    
            // pass container view to bitmap images so that will use to initialize recyclerView
            initBitmapImages(view);
    
            return view;
        }
    
    
    
        private void initBitmapImages(View view){
            Log.d(TAG, "initBitmapImages: preparing bitmaps");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 1");
            mDesc.add("This is foto 1");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 2");
            mDesc.add("This is foto 2");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 3");
            mDesc.add("This is foto 3");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 4");
            mDesc.add("This is foto 4");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 5");
            mDesc.add("This is foto 5");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 6");
            mDesc.add("This is foto 6");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 7");
            mDesc.add("This is foto 7");
    
            mImage.add("https://i.redd.it/j6myfqglup501.jpg");
            mTitle.add("Foto 8");
            mDesc.add("This is foto 8");
    
            // container view uses to initialize recycle view
            initRecyclerView(view);
        }
        private void initRecyclerView(View view){
            Log.d(TAG, "initRecyclerView: init recyclerView");
    
            // Initialize recycle view which exist in parent container view so it found and initialize 
            RecyclerView recyclerView = view.findViewById(R.id.recyclerView);
            RecyclerViewAdapter adapter = new RecyclerViewAdapter(mImage,mTitle,mDesc,getContext());
            recyclerView.setAdapter(adapter);
            recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        }
    }
    

    【讨论】:

    • 如果有帮助,谢谢。实际上 findViewById 需要在之前的代码中搜索视图,它没有找到回收视图,所以我更改了代码并向 findViewById 提供片段视图,所以它会找到在里面并初始化它
    • 我已经用 cmets 中的一些解释更新了我的答案。我试图解释可能会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2018-07-21
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2018-06-12
    相关资源
    最近更新 更多