Salut les gars, j'utilise recyclerview dans mon application. Au moment de l'afficher, n'afficher qu'un seul élément, mais lorsque je le débogue, il arrive à chaque fois à la méthode onBindViewHolder . Voici ma adapter

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.tourist_details_info, parent, false);

    return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    try {
            holder.displayName.setText(list.get(position).toUpperCase());
    }catch (Exception e){
       AxeltaLogger.err("error>>>"+e);
    }
}
@Override
public int getItemCount() {
    return list.size();
}

Et ceci ma recyclerview

 RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setHasFixedSize(true);
touristAdapter=new TouristInfoAdapter(list);
recyclerView.setAdapter(touristAdapter);
6
Ritu Suman Mohanty 17 nov. 2017 à 13:52

4 réponses

Meilleure réponse

Dans votre mise en page tourist_details_info.xml, faites la hauteur du parent de match_parent à une hauteur spécifique (100dp ou quelque chose) ou utilisez wrap_content comme android:layout_height="match_parent"

4
xbadal 17 nov. 2017 à 11:15

Je me sens tellement stupide maintenant, mais je peux peut-être aider les autres:

Mon problème était que l'ORIENTATION a été réglée sur HORIZONTAL car je copie et colle à partir d'un autre endroit de l'application, changez-la en VERTICAL cela fonctionne bien.

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
0
Acauã Pitta 14 avril 2020 à 03:25

Si vous utilisez RecyclerView dans ScrollView, remplacez ScrollView par NestedScrollView.

Activer Android: nestedScrollingEnabled = "false" dans RecyclerView

Cela a résolu mon problème

1
suhas sasuke 13 avril 2020 à 15:06

C'est l'erreur la plus courante que tout le monde fait lors de l'utilisation d'un recyclerView. Au lieu d'utiliser position dans le onBindViewHolder, vous devez utiliser

holder.getAdapterPosition()

Lors de la récupération des données d'une liste. La position que vous utilisez dans onBindViewHolder est la position de l'élément sur l'écran qui sera limitée au nombre maximum d'éléments sur votre écran actuel.

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    try {
        holder.displayName.setText(list.get(holder.getAdapterPosition().toUpperCase());
    } 
    catch (Exception e) {
        AxeltaLogger.err("error>>>" + e);
    }
}

J'espère que cela t'aides.

2
user2025187 16 févr. 2018 à 08:59
47348955