Question Recyclerview n'appelle pas onCreateViewHolder


ma RecyclerView n'appelle pas onCreateViewHolder, onBindViewHolder même MenuViewHolder constructeur, donc rien n'apparaît dans RecyclerView. Je mets des journaux pour le débogage et aucun journal n'est affiché. Quel pourrait être le problème?

Mon adaptateur:

public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();

public MenuAdapter(Context context, List<Menu> data) {
    Log.i("DEBUG", "Constructor");
    inflater = LayoutInflater.from(context);
    Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
    this.data = data;
    for(Menu menu: this.data){
        Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
    }
}

@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.row_menu, parent, false);
    MenuViewHolder holder = new MenuViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
    Log.i("DEBUG MENU", "onBindViewHolder");
    Menu current = data.get(position);
    holder.title.setText(current.menu);
}

@Override
public int getItemCount() {
    return 0;
}

class MenuViewHolder extends RecyclerView.ViewHolder {
    TextView title;
    ImageView icon;

    public MenuViewHolder(View itemView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.menuText);
    }
}

Ma ligne XML personnalisée:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/menuText"
    android:text="Dummy Text"
    android:layout_gravity="center_vertical"
    android:textColor="#222"/>

et mon fragment:

public NavigationFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));
    if (savedInstanceState != null) {
        mFromSavedInstaceState = true;
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment

    View view = inflater.inflate(R.layout.fragment_navigation, container, false);
    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list);
    MenuAdapter adapter = new MenuAdapter(getActivity(), getData());
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(adapter);
    return view;
}

85
2018-01-07 00:18


origine


Réponses:


Votre getItemCount méthode returns 0. Alors RecyclerView n'essaie jamais d'instancier une vue. Faites en sorte que quelque chose revienne greater than 0.


165
2018-01-07 00:24



Un autre est de vous assurer que vous définissez le gestionnaire de disposition sur RecyclerView:

recycler.setLayoutManager(new LinearLayoutManager(this));

287
2017-09-29 10:55



J'ai oublié d'ajouter la ligne ci-dessous après avoir ajouté que cela a fonctionné pour moi

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

17
2018-01-26 20:17



FWIW, je l'ai observé lorsque j'ai configuré l'adaptateur de vue du recycleur avant L'adaptateur a été initialisé. La solution était de s'assurer recyclerView.setAdapter(adapter) a été appelé avec un adaptateur non null


8
2017-07-09 14:42



Cela ne s'applique pas à votre cas particulier. Mais cela pourrait aider quelqu'un d'autre.

Cette raison pourrait être une utilisation imprudente de la méthode suivante

recyclerView.setHasFixedSize(true);

Si elle n'est pas utilisée avec précaution, cela peut provoquer onBindView et onCreateViewHolder ne pas être appelé du tout, sans erreur dans les journaux.


7
2018-02-05 16:25



Réglage de la hauteur du TextView dans le custom.xml ou RecyclerView. Si la hauteur est wrap-content, la RecyclerView ne sera pas visible.


4
2017-07-06 14:08



C'est arrivé quand mon RecyclerView était à l'intérieur d'un ScrollView et j'utilisais Android Support Library 23.0. Pour corriger, j'ai mis à jour vers Android Support Library 23.2:

Dans build.gradle:

dependencies {
    ...
    compile 'com.android.support:appcompat-v7:23.2.+'
    compile 'com.android.support:cardview-v7:23.2.+'
}

4
2017-09-28 21:22



J'ai eu le même problème, parce que j'utilisais android.support.constraint.ConstraintLayout dans la ressource de mise en page. Passer à FrameLayout aidé.


3
2018-06-25 10:28



Ajoutez ceci à votre classe d'adaptateur

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

3
2018-01-12 13:06



Veuillez définir le gestionnaire de disposition sur RecyclerView comme ci-dessous:

RecyclerView recyclerView = (RecyclerView) findViewById (R.id.recycler_view_right); NavigationAdapter adapter = new NavigationAdapter (this, FragmentDrawer.getData ()); recyclerView.setAdapter (adaptateur); recyclerView.setLayoutManager (nouveau LinearLayoutManager (this));


2
2018-04-14 13:08



Voir ma réponse si vous utilisez la bibliothèque de liaison de données Android - Assurez-vous que vous définissez la mise en page pour recyclerview et que le nombre d’éléments doit être supérieur à 0

 @BindingAdapter({"entries", "layout"})
    public static void setEntries(RecyclerView view, ArrayList<LoginResponse.User> listOfUsers, int layoutId) {
        if (view.getAdapter() == null) {
            view.setLayoutManager(new LinearLayoutManager(view.getContext()));
            SingleLayoutAdapter adapter = new SingleLayoutAdapter(layoutId) {
                @Override
                protected Object getObjForPosition(int position) {

                    return listOfUsers.get(position);
                }

                @Override
                public int getItemCount() {
                    return listOfUsers.size();
                }
            };
            view.setAdapter(adapter);
        }
    }

Heureux codage :-)


2
2018-03-21 12:09