reciclar reciclapp para comunas colombia basura app aplicaciones android android-fragments android-navigation

android - para - reciclapp colombia



Vista del reciclador que no se muestra (3)

He estado creando una aplicación que utiliza una vista de reciclador en un cajón de navegación, por la forma en que el contenido de la vista de reciclador no se ha mostrado. La vista es definitivamente su como puedo ver las sombras de desplazamiento. No estoy seguro de querer haberlo hecho mal ya que la aplicación no falla cuando se ejecuta.

Fragmento del cajón de navegación:

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); } }

Adaptador:

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); } } }

Fila del cajón:

public class DrawerRow { int iconId; String title; }

Diseño:

<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>

Fila del cajón:

<?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>

Disposición del fragmento del cajón de navegación:

<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>


El problema es que está devolviendo el recuento de elementos como 0, lo que indica que no hay filas para mostrar. Debe devolver el tamaño de la Lista como se muestra a continuación.

@Override public int getItemCount() { return data.size(); }


Estoy de acuerdo en que necesita devolver el número de artículo correcto, pero creo que podría tener un problema con la configuración de la altura de la vista del reciclador en wrap_content también. He encontrado this enlace muy útil. Espero eso ayude.


Reemplazar la siguiente línea

mRecyclerView.setAdapter(adapter); mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

con

mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); mRecyclerView.setAdapter(adapter);