Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recycler View Not Showing

I have been making an app that uses a recycler view in a navigation drawer. Why the contents of the recycler view are not showing up. The view is definitely there as I can see the scroll shadows. I am not sure what I have done wrong, as the app does not crash when it is run.

Navigation Drawer Fragment:

public class NavigationDrawerFragment extends android.support.v4.app.Fragment {      public static final String PREF_FILE_NAME = "testPref";     public static final String KEY_USER_LEARNED_DRAWER = "user_learned_drawer";     private RecyclerView mRecyclerView;     private ActionBarDrawerToggle mDrawerToggle;     private DrawerLayout mDrawerLayout;     private View containerView;     private Boolean mUserLearnedDrawer;     private Boolean mFromSavedInstanceState;     private DrawerAdapter adapter;      public NavigationDrawerFragment() {         mFromSavedInstanceState = false;     }       @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));         if (savedInstanceState != null){             mFromSavedInstanceState = true;         }     }      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,                              Bundle savedInstanceState) {         // Inflate the layout for this fragment         View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);         mRecyclerView = (RecyclerView) layout.findViewById(R.id.drawerList);         adapter = new DrawerAdapter(getActivity(), getData());         mRecyclerView.setAdapter(adapter);         mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));         return layout;     }      public static List<DrawerRow> getData(){         List<DrawerRow> data = new ArrayList<>();         int icons[] = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};         String titles[] = {"Link 1","Link 2","Link 3","Link 4"};         for (int i = 0 ; i < titles.length && i < icons.length; i++){             DrawerRow current = new DrawerRow();             current.iconId = icons[i];             current.title = titles[i];             data.add(current);         }          return data;     }      public void setUp(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {         containerView = getActivity().findViewById(fragmentId);         mDrawerLayout = drawerLayout;         mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawerOpen, R.string.drawerClosed){              @Override             public void onDrawerOpened(View drawerView) {                 super.onDrawerOpened(drawerView);                 if(!mUserLearnedDrawer){                     mUserLearnedDrawer = true;                     saveToPreferences(getActivity(),KEY_USER_LEARNED_DRAWER, mUserLearnedDrawer+"");                 }                 getActivity().invalidateOptionsMenu();             }              @Override             public void onDrawerClosed(View drawerView) {                 super.onDrawerClosed(drawerView);                 getActivity().invalidateOptionsMenu();             }         };          if(!mUserLearnedDrawer && !mFromSavedInstanceState){             mDrawerLayout.openDrawer(containerView);         }          mDrawerLayout.setDrawerListener(mDrawerToggle);         mDrawerLayout.post(new Runnable() {             @Override             public void run() {                 mDrawerToggle.syncState();             }         });     }      public void saveToPreferences(Context context, String prefName, String prefValue){         SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);         SharedPreferences.Editor mEditor = sharedPreferences.edit();         mEditor.putString(prefName, prefValue);         mEditor.apply();     }      public static String readFromPreferences(Context context, String prefName, String defaultValue){         SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);         return sharedPreferences.getString(prefName,defaultValue);     } } 

Adapter:

public class DrawerAdapter extends RecyclerView.Adapter<DrawerAdapter.MyViewHolder>{      private LayoutInflater inflator;     List<DrawerRow> data = Collections.EMPTY_LIST;      public DrawerAdapter(FragmentActivity activity, List<DrawerRow> data) {         inflator = LayoutInflater.from(activity);         this.data = data;     }       @Override     public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {         View view = inflator.inflate(R.layout.nav_drawer_row , viewGroup,false);         MyViewHolder holder = new MyViewHolder(view);         return holder;     }      @Override     public void onBindViewHolder(MyViewHolder viewHolder, int i) {         DrawerRow current = data.get(i);         viewHolder.title.setText(current.title);         viewHolder.icon.setImageResource(current.iconId);     }      @Override     public int getItemCount() {         return 0;     }      class MyViewHolder extends RecyclerView.ViewHolder{         ImageView icon;         TextView title;          public MyViewHolder(View itemView) {             super(itemView);             icon = (ImageView) itemView.findViewById(R.id.list_icon);             title = (TextView) itemView.findViewById(R.id.list_text);         }     } } 

Drawer Row:

public class DrawerRow {     int iconId;     String title; } 

Layout:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:id="@+id/drawerLayout">      <!--Main Content -->     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="vertical">          <include             android:id="@+id/app_bar"             layout="@layout/app_bar" />          <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="New Text" />      </LinearLayout>      <!--Nav Drawer -->     <fragment         android:layout_width="@dimen/nav_drawer_width"         android:layout_height="match_parent"         android:layout_gravity="start"         android:name="uk.co.clickcomputing.hhscweatherstation.NavigationDrawerFragment"         android:id="@+id/fragment_navigation_drawer"/>  </android.support.v4.widget.DrawerLayout> 

Drawer Row:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="horizontal" android:layout_width="match_parent"     android:layout_height="match_parent">      <ImageView         android:padding="@dimen/list_padding"         android:id="@+id/list_icon"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center_vertical"         android:src="@drawable/ic_launcher"/>      <TextView         android:padding="@dimen/list_padding"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center_vertical"         android:text="New Text"         android:id="@+id/list_text" /> </LinearLayout> 

Navigation Drawer Fragment Layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:background="#eee"     android:orientation="vertical">          <ImageView             android:layout_width="match_parent"             android:layout_height="140dp"             android:layout_marginBottom="8dp"             android:contentDescription="@string/nav_drawer_img_desciption"             android:scaleType="centerCrop"             android:src="@drawable/nav_drawer" />              <android.support.v7.widget.RecyclerView             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:id="@+id/drawerList">              </android.support.v7.widget.RecyclerView>     </LinearLayout> 
like image 866
cheese12345 Avatar asked Dec 30 '14 12:12

cheese12345


People also ask

How do I reset my recycler view?

If you are trying to clear all items from the RecyclerView, you need to delete all items from its adapter and then notify it via an appropriate method. If you are trying to only remove whatever filter applied on it, in order to show all items, then it will depend on how results are being filtered.


1 Answers

The issue is that you are returning the item count as 0 which tells that there is no rows to show. You should return the size of the List as shown below.

    @Override     public int getItemCount() {         return data.size();     } 
like image 156
Psypher Avatar answered Sep 21 '22 19:09

Psypher