J'essaie de comprendre l'affichage d'une liste d'éléments dans Android. De développeurs.android, ils l'expliquent. Cependant, mon application se bloque pour une raison quelconque. J'ai essayé de mettre mon tableau String en tant que mannequin sans résultat. Ceci en dépit du fait que le code n'ait aucune erreur. La trace de la pile indique NoResourceException. La seule ressource est mon dossier d'activité, qui est en place. Je commence à penser que c'est peut-être quelque chose qui dépasse le code. Peut-être une dépendance.
MainActivity.java
java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.TextView
at com.projects.recyclerview.MyAdapter.onCreateViewHolder(MyAdapter.java:34)
at com.projects.recyclerview.MyAdapter.onCreateViewHolder(MyAdapter.java:12)
at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194)
at android.view.View.layout(View.java:17051)
at android.view.ViewGroup.layout(ViewGroup.java:5600)
at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
at android.view.View.layout(View.java:17051)
at android.view.ViewGroup.layout(ViewGroup.java:5600)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
at android.view.View.layout(View.java:17051)
at android.view.ViewGroup.layout(ViewGroup.java:5600)
at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
at android.view.View.layout(View.java:17051)
at android.view.ViewGroup.layout(ViewGroup.java:5600)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
at android.view.View.layout(View.java:17051)
at android.view.ViewGroup.layout(ViewGroup.java:5600)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:2001)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1844)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1753)
at android.view.View.layout(View.java:17051)
at android.view.ViewGroup.layout(ViewGroup.java:5600)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:396)
at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2777)
at android.view.View.layout(View.java:17051)
at android.view.ViewGroup.layout(ViewGroup.java:5600)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2648)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2328)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1369)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6932)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909)
at android.view.Choreographer.doCallbacks(Choreographer.java:702)
at android.view.Choreographer.doFrame(Choreographer.java:631)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:895)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:227)
at android.app.ActivityThread.main(ActivityThread.java:6102)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:961)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:822)
MyAdapter.java
android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.Resources.getValue(Resources.java:1552)
at android.content.res.Resources.getDrawable(Resources.java:926)
at android.graphics.drawable.Icon.loadDrawableInner(Icon.java:313)
at android.graphics.drawable.Icon.loadDrawable(Icon.java:269)
at android.widget.RemoteViews$TextViewDrawableAction.apply(RemoteViews.java:1502)
at android.widget.RemoteViews.performApply(RemoteViews.java:2805)
at android.widget.RemoteViews.apply(RemoteViews.java:2764)
at android.widget.RemoteViews$ViewGroupAction.apply(RemoteViews.java:1373)
at android.widget.RemoteViews.performApply(RemoteViews.java:2805)
at android.widget.RemoteViews.reapply(RemoteViews.java:2795)
at com.android.systemui.statusbar.BaseStatusBar.updateNotificationViews(BaseStatusBar.java:2162)
at com.android.systemui.statusbar.BaseStatusBar.updateNotification(BaseStatusBar.java:2031)
at com.android.systemui.statusbar.BaseStatusBar$6$2.run(BaseStatusBar.java:521)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:227)
at android.app.ActivityThread.main(ActivityThread.java:6102)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:961)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:822)
activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
StackTrace
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
public String[] mDataSet;
public static class MyViewHolder extends RecyclerView.ViewHolder{
public TextView textView;
public MyViewHolder(TextView itemView) {
super(itemView);
textView = itemView;
}
}
public MyAdapter(String[] dataSet) {
mDataSet = dataSet;
}
@Override
public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
TextView v = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main, parent, false);
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
holder.textView.setText(mDataSet[position]);
}
@Override
public int getItemCount() {
return mDataSet.length;
}
}
Stacktrace mis à jour
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
String[] names;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
names = new String[] {"John","Peter","James","Andrew"};
recyclerView = findViewById(R.id.my_recycler_view);
recyclerView.setHasFixedSize(true);
layoutManager= new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
adapter = new MyAdapter(names);
recyclerView.setAdapter(adapter);
}
}
3 Réponses :
<android.support.v7.widget.RecyclerView
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Cela ne corrigera pas une erreur de diffusion. L'un des deux que vous avez publiés est correct, selon qu'il utilise Androidx ou l'ancienne bibliothèque de support.
Si vous voyez que les deux bibliothèques sont compilées, les dépendances sont appliquées correctement. Il vous guide uniquement pour utiliser la même bibliothèque.
Journal de casting que j'ai manqué ^^;
TextView v = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main, parent, false); The root view of activity_mail isn't a TextView, it's a ConstraintLayout. You're inflating the wrong file most likely- its a little odd for activity_main to be inflated inside a recyclerview
Vous utilisez probablement la mauvaise mise en page en essayant de créer la vue de l'outil de recyclage. activity_main est votre disposition générale pour l'activité, mais vous essayez de l'utiliser dans onCreateViewHolder comme élément de liste.
Vous recherchez probablement quelque chose appelé list_item .
LayoutInflater.from (parent.getContext ()). inflate (R.layout.list_item, parent, false);
Soyez prudent sur le R.layout.list_item . Vous avez actuellement R.layout.activity_main ici. Utilisez votre vue correcte pour gonfler l'élément de liste.
Je comprends cela maintenant. Je gonflais la mauvaise chose, le fichier de mise en page. Je suppose que ce devrait être la vue de recyclage créée dans le fichier de mise en page qui devrait être gonflée. Droit? En branchant cela, ce n'est pas reconnu.
Non, vous devriez gonfler la mise en page de la vue des éléments de liste, pas la vue de l'outil de recyclage.
Je l'ai changé en un list_item que j'ai créé. Le seul problème est le ClassCastException. J'ai essayé d'utiliser les dispositions linéaires et relatives sans succès.
Avez-vous essayé de nettoyer le projet et de le reconstruire?
Je ne pense pas que vous ayez la bonne trace de pile.
com.android.systemui.statusbarne peut pas être votre package. Veuillez poster le bon.Vous avez raison. Changé en androidx recyclerview. J'ai ça