Display a RecyclerView in Fragment

后端 未结 4 2149
离开以前
离开以前 2020-12-04 06:25

I\'m trying out the new RecyclerView in Android Lollipop and I\'m stuck.

I\'m trying to receive a list, with an icon and a TextView to the

4条回答
  •  庸人自扰
    2020-12-04 07:00

    This was asked some time ago now, but based on the answer that @nacho_zona3 provided, and previous experience with fragments, the issue is that the views have not been created by the time you are trying to find them with the findViewById() method in onCreate() to fix this, move the following code:

    // 1. get a reference to recyclerView
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.list);
    
    // 2. set layoutManger
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
    // this is data fro recycler view
    ItemData itemsData[] = { new ItemData("Indigo",R.drawable.circle),
            new ItemData("Red",R.drawable.color_ic_launcher),
            new ItemData("Blue",R.drawable.indigo),
            new ItemData("Green",R.drawable.circle),
            new ItemData("Amber",R.drawable.color_ic_launcher),
            new ItemData("Deep Orange",R.drawable.indigo)};
    
    
    // 3. create an adapter
    MyAdapter mAdapter = new MyAdapter(itemsData);
    // 4. set adapter
    recyclerView.setAdapter(mAdapter);
    // 5. set item animator to DefaultAnimator
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    

    to your fragment's onCreateView() call. A small amount of refactoring is required because all variables and methods called from this method have to be static. The final code should look like:

     public class ColorsFragment extends Fragment {
    
         public ColorsFragment() {}
    
         @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
    
             View rootView = inflater.inflate(R.layout.fragment_colors, container, false);
             // 1. get a reference to recyclerView
             RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.list);
    
             // 2. set layoutManger
             recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    
             // this is data fro recycler view
             ItemData itemsData[] = {
                 new ItemData("Indigo", R.drawable.circle),
                     new ItemData("Red", R.drawable.color_ic_launcher),
                     new ItemData("Blue", R.drawable.indigo),
                     new ItemData("Green", R.drawable.circle),
                     new ItemData("Amber", R.drawable.color_ic_launcher),
                     new ItemData("Deep Orange", R.drawable.indigo)
             };
    
    
             // 3. create an adapter
             MyAdapter mAdapter = new MyAdapter(itemsData);
             // 4. set adapter
             recyclerView.setAdapter(mAdapter);
             // 5. set item animator to DefaultAnimator
             recyclerView.setItemAnimator(new DefaultItemAnimator());
    
             return rootView;
         }
     }
    

    So the main thing here is that anywhere you call findViewById() you will need to use rootView.findViewById()

提交回复
热议问题