【问题标题】:Recycler View crashing the app回收站视图使应用程序崩溃
【发布时间】:2017-03-01 16:10:03
【问题描述】:

我创建了一个使整个应用程序崩溃的回收器视图。我在主要活动以外的新包中创建了这个回收器视图

这是我的 MainActivity.java 文件

package bk.acs;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import bk.acs.AddingToDatabase.MyDialog;
import bk.acs.RecyclerView.Data;
import bk.acs.RecyclerView.MyAdapter;
import bk.acs.databases.Main;

public class MainActivity extends AppCompatActivity {
    FloatingActionButton fab;
    RecyclerView recview;
    MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fab=(FloatingActionButton)findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MyDialog dialog=new MyDialog();
                dialog.show(getFragmentManager(),"myDialog");
            }
        });
        recview=(RecyclerView)findViewById(R.id.recview);
        adapter=new MyAdapter(Data.getList(),this);
        recview.setLayoutManager(new LinearLayoutManager(this));
        recview.setAdapter(adapter);
    }
}

这是我的 Data.java 文件,它为回收站视图提供数据

package bk.acs.RecyclerView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by koteswarao on 01-03-2017.
 */

public class Data {
    public static String sample[]={"First subject", "second subject","third subject","fourth subject","fifth subject","subject"};
    public static List<ListItem> list=new ArrayList<>();
    public static List getList()
    {
        for(int i=0;i<sample.length;i++)
        {
            list.add(new ListItem(sample[i],(i+1)));
        }
        return list;
    }
}

这是 MyAdapter.java 文件

package bk.acs.RecyclerView;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

import bk.acs.R;

/**
 * Created by koteswarao on 01-03-2017.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder>{
    List<ListItem> listdata;
    LayoutInflater inflater;
    public MyAdapter(List<ListItem> list, Context c)
    {
        this.inflater=LayoutInflater.from(c);
        listdata=list;
    }

    @Override
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view=inflater.inflate(R.layout.subjects_li,parent,false);
        return new Holder(view);
    }

    @Override
    public void onBindViewHolder(Holder holder, int position) {
        ListItem item=listdata.get(position);
        holder.subjectName.setText(item.subName);
        holder.serialNo.setText(item.sno);
    }

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

    class Holder extends RecyclerView.ViewHolder
    {
        TextView subjectName;
        TextView serialNo;
        View container;
        public Holder(View itemView) {
            super(itemView);
            subjectName=(TextView)itemView.findViewById(R.id.subjectTitle);
            serialNo=(TextView)itemView.findViewById(R.id.sno);
            container=itemView.findViewById(R.id.sub_li);
        }
    }

}

我已经给recyclerview一个recview id,所以我没有保留main_recyclerview.xml

这是我的subject_li.xml,它被夸大了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:id="@+id/cont_root"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    >



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white"
        android:id="@+id/sub_li"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="S.NO"
            android:textColor="@android:color/white"
            android:gravity="center"
            android:id="@+id/sno"
            android:padding="15dp"
            android:background="@android:color/holo_blue_dark"
            />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >
            <TextView
                android:layout_width="match_parent"
                android:padding="30dp"
                android:gravity="center"
                android:textColor="@android:color/black"
                android:id="@+id/subjectTitle"
                android:layout_height="match_parent"
                android:text="SUBJECT NAME"
                />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

这是我的 activity_main.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="#d3d3d3"
    >
    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:id="@+id/fab"
        android:src="@drawable/add"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="20dp"
        />
    <include layout="@layout/main_recyclerview"/>
</android.support.design.widget.CoordinatorLayout>

ListItem.java 是一个简单的类,它有两个数据类型 string 和 int,并带有一个构造函数来初始化它们。

请帮助我。提前谢谢...

这是我的 logcat 详细信息

03-01 21:53:32.634 17772-17772/? I/art: Late-enabling -Xcheck:jni
03-01 21:53:32.710 17772-17772/bk.acs W/System: ClassLoader referenced unknown path: /data/app/bk.acs-2/lib/arm
03-01 21:53:32.725 17772-17772/bk.acs I/InstantRun: Instant Run Runtime started. Android package is bk.acs, real application class is null.
03-01 21:53:32.809 17772-17772/bk.acs W/System: ClassLoader referenced unknown path: /data/app/bk.acs-2/lib/arm
03-01 21:53:33.024 17772-17772/bk.acs W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
03-01 21:53:33.519 17772-17830/bk.acs I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: QUALCOMM Build: 06/15/16, 8520914, Ic0d3aa8c86
03-01 21:53:33.521 17772-17830/bk.acs I/OpenGLRenderer: Initialized EGL, version 1.4
03-01 21:53:33.521 17772-17830/bk.acs D/OpenGLRenderer: Swap behavior 1
03-01 21:53:33.537 17772-17772/bk.acs W/ResourceType: No package identifier when getting value for resource number 0x00000001
03-01 21:53:33.538 17772-17772/bk.acs D/AndroidRuntime: Shutting down VM
03-01 21:53:33.540 17772-17772/bk.acs E/AndroidRuntime: FATAL EXCEPTION: main
                                                        Process: bk.acs, PID: 17772
                                                        android.content.res.Resources$NotFoundException: String resource ID #0x1
                                                            at android.content.res.Resources.getText(Resources.java:335)
                                                            at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52)
                                                            at android.widget.TextView.setText(TextView.java:4551)
                                                            at bk.acs.RecyclerView.MyAdapter.onBindViewHolder(MyAdapter.java:38)
                                                            at bk.acs.RecyclerView.MyAdapter.onBindViewHolder(MyAdapter.java:18)
                                                            at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217)
                                                            at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250)
                                                            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487)
                                                            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363)
                                                            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
                                                            at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370)
                                                            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
                                                            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)
                                                            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)
                                                            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                            at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1037)
                                                            at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:747)
                                                            at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:761)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                            at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:433)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                            at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                            at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                            at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                            at com.android.internal.policy.DecorView.onLayout(DecorView.java:726)
                                                            at android.view.View.layout(View.java:17643)
                                                            at android.view.ViewGroup.layout(ViewGroup.java:5612)
                                                            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2341)
                                                            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068)
                                                            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
                                                            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6306)
                                                            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
                                                            at android.view.Choreographer.doCallbacks(Choreographer.java:686)
                                                            at android.view.Choreographer.doFrame(Choreographer.java:621)
                                                            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
03-01 21:53:33.540 17772-17772/? E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:751)
                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                       at android.os.Looper.loop(Looper.java:154)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6088)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

【问题讨论】:

  • 你能显示你的崩溃信息吗
  • 能否提供 logcat 的错误日志?
  • 你的堆栈跟踪说什么?
  • 您的错误日志告诉您没有通过提供其 ID 定义回收站视图。查看我的回答了解更多信息
  • getList中的数据类返回类型改变List

标签: android android-recyclerview


【解决方案1】:

我在您的任何 xml 文件中都找不到回收站视图声明。无论如何,您需要为回收站视图分配视图 -

recview = (RecyclerView) findViewById(R.id.<your_view_id>);

【讨论】:

  • 它在我已经说过的 main_recyclerview xml 文件中
  • 在 MainActivity.java 你必须写 recview = (RecyclerView) findViewById(R.id.);并且需要给recycler view.xml的父布局赋予相同的ID
  • 遗憾的是我忘记声明回收站视图....现在我声明即使没有任何改变我也要更新 logcat 请看
  • 你能改变这个吗 - holder.serialNo.setText(item.sno); to - holder.serialNo.setText(Integer.toString(item.sno));
  • 兄弟我通过评论这一行来阻止它崩溃 holder.serialNo.setText(item.sno);在 MyAdapter.java 但我不知道为什么....
【解决方案2】:

在 MyAdapter 序列号中没有改变这个

holder.serialNo.setText("" + item.sno);

【讨论】:

  • 与使用 Integer.toString(); 相同的事情;
【解决方案3】:

RecyclerView 持有者只能承受字符串,因为我给了 int 值,所以我的应用程序崩溃了..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多