java.lang.NullPointerException à android.de soutien.v7.widget de.RecyclerView.onMeasure
J'essaie d'utiliser RecyclerView avec RecyclerView.Adaptateur, mais voici quelque chose de mal. Je poste mon code ci-dessous:
Mise en page:
<android.support.v7.widget.RecyclerView
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topic_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />
topic_tile.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/tile_height">
<com.makeramen.RoundedImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/avatar"
android:padding="16dp"
app:riv_corner_radius="72dp"
android:layout_height="72dp"
android:layout_width="72dp"
/>
<LinearLayout
android:id="@+id/text_layout"
android:orientation="vertical"
android:paddingTop="@dimen/text_padding_top_and_bottom"
android:paddingBottom="@dimen/text_padding_top_and_bottom"
android:paddingRight="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:textSize="@dimen/primary_font"
android:paddingLeft="@dimen/text_padding_left"
android:textColor="#000000"
android:text="Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/author"
android:textSize="@dimen/secondary_font"
android:paddingLeft="@dimen/text_padding_left"
android:text="author"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>
Ici est en onCreate()
public class TitleListActivity extends ActionBarActivity {
private RecyclerView topic_view;
private RecyclerView.LayoutManager mLayoutManager;
private TitlelistAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_title_list);
.....
topic_view = (RecyclerView)findViewById(R.id.topic_view);
adapter = new TitlelistAdapter(topicList);
topic_view.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(TitleListActivity.this);
topic_view.setLayoutManager(mLayoutManager);
topic_view.setItemAnimator(new DefaultItemAnimator());
topic_view.setAdapter(adapter);
la Carte:
public class TitlelistAdapter extends RecyclerView.Adapter<TitlelistAdapter.ViewHolder> {
public List<Topic> topicList;
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView title;
TextView author;
RoundedImageView avatar;
public ViewHolder(View itemView) {
super(itemView);
title = (TextView)itemView.findViewById(R.id.title);
author = (TextView)itemView.findViewById(R.id.author);
avatar = (RoundedImageView)itemView.findViewById(R.id.avatar);
}
}
public TitlelistAdapter(List<Topic> topicList){
this.topicList = topicList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.topic_tile,viewGroup,false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.title.setText(topicList.get(i).title);
viewHolder.author.setText(topicList.get(i).member.username);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public int getItemCount() {
return topicList.size();
}
}
Ici est l'exception:
java.lang.NullPointerException
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1694)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
at android.view.View.measure(View.java:16497)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Est-il quelque chose que je n'ai pas d'init ou quelque chose que je devrais écrire plus?
Vous devez vous connecter pour publier un commentaire.
J'ai eu cette erreur quand mon RecyclerView avait pas de LayoutManager. L'ajout de ce code fixe le problème:
Votre xml montre que vous avez deux android espaces de noms qui, en fait, devrait vous donner une erreur car dans android, vous êtes autorisé à utiliser l'espace de noms qu'une seule fois. Retirez le linearLayout à partir de votre page principale comme il me semble inutile. Vérifiez votre Ligne personnalisée mise en page je.e
topic_tile
pour des erreurs similairesEDIT :
dans
onCreate()
topic_tile
fichier de mise en page ainsi ?LayoutManager
classe au lieu desetLayoutManager(new LinearLayoutManager(TitleListActivity.this));
topic_tile.xml
fichier que vous avez l'élément racine comme un RelativeLayout. Changement de linéaire et de supprimer le linearLayout qui est le parent de la vue pour les 2 textviews.topic_file.xml
fichier. Le reste du code est exactement la même que la façon dont j'ai mis en œuvre la RecylerView, la seule chose, c'est la vue personnalisée qui vous avez dans votre xml. Essayez de les enlever et de voir si une vue avec seulement 2 textviews devient gonflé ou pasSi vous êtes confrontés au même problème pour RecycleView à l'intérieur d'un fragment, essayez d'utiliser ce code.
Fragment
s, comme je pense la question de la première affiche a été, et ce doit être la raison de cetteNullPointerException
. J'ai eu le code que vous avez posté (l'instanciation deRecyclerView
,LinearLayoutManager
, les appels àsetLayoutManager
etsetAdapter
, etc.) dans le Fragment de laonCreate()
méthode au lieu de laonCreateView
méthode. Argh. Merci encore homme!Vous devez définir
LayoutManager
pourRecycleView
:Actuellement, android supporte 3 types de mises en page.
Si vous voulez qu'il semble normal
ListView
, utilisezLinearLayoutManager
.Si vous voulez qu'il semble un gridView, utilisez
GridLayoutManager
.Si vous voulez paraître décalés, l'utilisation
StaggeredGridLayoutManager
Constructeurs pour les 3 types dispositions ci-dessus
Vous pouvez alors définir
LinearLayout
àRecycleView
( dans ce cas, j'ai utiliséLinearLayoutManager
De toute façon, utiliser OttoBus Bibliothèque à passer des événements à partir de la Carte d'Activité/Fragment contenant le
RecycleView
.Bonne chance !
Pour ceux qui cherchent à utiliser un ViewPager pour les onglets, et à l'intérieur de leurs onglets ont un RecyclerView qui provoque cette folle erreur, je suggère de reporter gonfler en créant encore un autre Fragment pour le RecylerView.
Ce fichier xml est l'un de mes onglets qui contiennent un cadre de mise en page au lieu d'un recycleur .
shop_most_views_fragment.xml
sa classe java
nous avons donc un cadre de mise en page pour mettre nos recylcer fragment en elle.
shop_most_view_masanory_fragment.xml
sa classe java
comme vous le voyez votre FragmentPagerAdapter appellerais MostViews d'être gonflé et MostViews lui-même pourrait appeler MasanoryLayout d'être gonflé. nous avons donc échappé FragmentPagerAdapter contexte 😉