显示java.lang.NullPointerException在android.support.v7.widget.RecyclerView.onMeasureNullPointerExceptio

2023-09-05 11:04:38 作者:囚你无期

我尝试使用RecyclerView与RecyclerView.Adapter但这里是有些不妥。我后下我的code:

I try to use RecyclerView with RecyclerView.Adapter but here is something wrong. I post my code below:

布局:

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

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>

下面是的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);

适配器:

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

下面是例外:

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)

有什么事情我没有初始化或东西我应该写更多?

Is it something I didn't init or something I should write more?

推荐答案

您的XML表明你有两个机器人的命名空间,实际上应该给你一个错误,因为在Android中你被允许使用的名称空间只有一次。从主布局中删除的LinearLayout,因为它似乎没有必要。请检查您的自定义行布局即 topic_tile 以及任何类似的错误

Your xml shows that you have two android namespaces which actually should give you an error because in android you are allowed to use the namespace only once. Remove the linearLayout from your main layout as it seems unnecessary. Check your custom Row layout i.e topic_tile as well for any similar errors

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

编辑:

的onCreate()

private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        .
        . 
        .
        mLayoutManager = new LinearLayoutManager(this);
        recycleView.setLayoutManager(mLayoutManager);
    }