Как мне узнать о NoResourceException - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь понять отображение списка элементов в Android. От разработчиков. android, они это объясняют. Тем не менее, мое приложение по какой-то причине падает. Я попытался поместить мой массив String в качестве пустышки без каких-либо результатов. Это несмотря на то, что в коде нет ошибок. Трассировка стека говорит NoResourceException. Единственный ресурс - мой файл активности, который находится на месте. Я начинаю думать, что это может быть что-то за пределами кода. Возможно зависимость.

MainActivity. java


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

MyAdapter. java


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

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

    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)

Обновлен Stacktrace

    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)

Ответы [ 3 ]

2 голосов
/ 20 февраля 2020

Возможно, вы используете неправильный макет, пытаясь создать представление переработчика. activity_main - это ваш общий макет действия, однако вы пытаетесь использовать его в onCreateViewHolder как элемент списка.

Возможно, вы ищете что-то под названием list_item.

LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);

Будьте осторожны с R.layout.list_item. У вас сейчас есть R.layout.activity_main. Используйте правильное представление, чтобы надуть элемент списка.

1 голос
/ 20 февраля 2020
 TextView v = (TextView) LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_main, parent, false);

root представление Activity_mail - это не TextView, а ConstraintLayout. Скорее всего, вы надуваете не тот файл - это немного странно, когда активность_основа надувается внутри просмотра переработчика

0 голосов
/ 20 февраля 2020
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Вместо

<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 в MainActivity.

Надеюсь, это решит:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...