简体   繁体   English

错误膨胀 class ImageButton 应用程序崩溃

[英]Error inflating class ImageButton The app crashes

I'm making a small card game at the moment and for some reason anytime I try to open my second Activity, it crashes.我现在正在制作一个小型纸牌游戏,出于某种原因,每当我尝试打开我的第二个 Activity 时,它都会崩溃。 With the error being the one mentioned in the title.错误是标题中提到的错误。

I tried various ways and unfortunately it always gives me this error.我尝试了各种方法,不幸的是它总是给我这个错误。

This is my latest code:这是我的最新代码:

package com.example.juegocartas3;

import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Random;

public class Adapter extends ArrayAdapter {

    ArrayList<Cartas> barajaCartas = new ArrayList<>();
    Random random;
    Iterator itr = barajaCartas.iterator();
    public Adapter(@NonNull Context context, int idLayout, @NonNull ArrayList<Cartas> objects) {
        super(context, idLayout, objects);
        barajaCartas = objects;
    }

    @Override
    public int getCount() {
        return super.getCount();
    }

    @SuppressLint("InflateParams")
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        View v = convertView;
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.grid_view_items, null);
        ImageButton carta = v.findViewById(R.id.imageView);
        carta.setImageResource(barajaCartas.get(position).getImagenCarta());
        carta.setTag(barajaCartas.get(position).getPuntaje());

        return v;
    }
}

And it says the error is in this line:它说错误在这一行:

v = inflater.inflate(R.layout.grid_view_items, null);

And it doesn't make sense to me.这对我来说没有意义。

This are the rest of my classes that have to do with the Adapter这是我与适配器有关的类的 rest

package com.example.juegocartas3;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ClipData;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.RelativeLayout;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class MainActivity2 extends AppCompatActivity {

    GridView tablero;
    ArrayList<Cartas> barajaCartas = new ArrayList<>();

    /*ArrayList<Integer> myImageList = new ArrayList<>();*/

    Random random;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main2);

        tablero = (GridView) findViewById(R.id.contenedorGrid);
        barajaCartas.add(new Cartas(this,R.drawable.asdecopas,1));
        barajaCartas.add(new Cartas(this,R.drawable.asdeespadas,1));
        barajaCartas.add(new Cartas(this,R.drawable.caballodebastos,11));
        barajaCartas.add(new Cartas(this,R.drawable.caballodeespadas,11));
        barajaCartas.add(new Cartas(this,R.drawable.dosdecopas,2));
        barajaCartas.add(new Cartas(this,R.drawable.reydecopas,12));
        barajaCartas.add(new Cartas(this,R.drawable.sotadeespadas,10));
        barajaCartas.add(new Cartas(this,R.drawable.sotadeoros,0));
        barajaCartas.add(new Cartas(this,R.drawable.tresbastos,3));

        Adapter myAdapter = new Adapter (this,R.layout.grid_view_items,barajaCartas);
        tablero.setAdapter(myAdapter);

        Collections.shuffle(barajaCartas);

    }

    public void onClickCarta(View v) {

    }

}

My class of cards:我的卡class:

package com.example.juegocartas3;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.ImageButton;
import android.widget.ImageView;

import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable;

@SuppressLint("AppCompatCustomView")
public class Cartas extends ImageButton {

    @DrawableRes
    int imagenCarta;
    int puntaje;

    public Cartas(Context context,@DrawableRes int imagenCarta, int puntaje) {
        super(context);
        this.imagenCarta = imagenCarta;
        this.puntaje=puntaje;

    }
    @DrawableRes
    public int getImagenCarta(){
        return imagenCarta;
    }

    public void setImagenCarta() {
        this.imagenCarta = imagenCarta;
    }

    public int getPuntaje() {
        return puntaje;
    }

    public void setPuntaje(int puntaje) {
        this.puntaje = puntaje;
    }
}

And the two xml (the second one being the one I wish to stick on the first):还有两个 xml(第二个是我想放在第一个上的那个):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2"
    android:id="@+id/contenedor">

    <GridView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="10sp"
        android:layout_marginLeft="10sp"
        android:layout_marginTop="150dp"
        android:layout_marginEnd="10sp"
        android:layout_marginRight="10sp"
        android:layout_marginBottom="10sp"
        android:numColumns="3"
        android:id="@+id/contenedorGrid"
        android:horizontalSpacing="10dp"
        tools:ignore="UselessParent">
    </GridView>

</RelativeLayout>

The second one:第二个:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:id="@+id/grid_view_items">

    <ImageButton
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:src="@drawable/trasera"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:onClick="onClickCarta"
        />

</RelativeLayout>

Maybe it's too much to ask but is something wrong with any of these classes?也许问的太多了,但是这些课程有什么问题吗? Or should I do things a different way?或者我应该以不同的方式做事吗?

Edit: This is the error text:编辑:这是错误文本:

2022-05-25 18:24:23.107 2988-2988/com.example.juegocartas3 E/AndroidRuntime: FATAL EXCEPTION: main android.view.InflateException: Binary XML file line #8: Error inflating class ImageButton at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at com.example.juegocartas3.Adapter.getView(Adapter.java:41) at android.widget.AbsListView.obtainView(AbsListView.java:2271) at android.widget.GridView.onMeasure(GridView.java:1030) at android.view.View.measure(View.java:15172) at android.widget.RelativeLayout.measureChildHorizontal(R 2022-05-25 18:24:23.107 2988-2988/com.example.juegocartas3 E/androidruntime:致命异常:主要android.View.inflate.inflate.inflate.expection:Binary 882828282727421111111111888888888888888888888888888888888888888888888888888888888888888888888888888888888888888色型示例.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater. java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at com.example.juegocartas3.Adapter.getView(Adapter.java:41) at android.widget.AbsListView.obtainView(AbsListView.java:2271 ) 在 android.widget.GridView.onMeasure(GridView.java:1030) 在 android.view.View.measure(View.java:15172) 在 8824618409418.view.View.measure(View.java:15172) elativeLayout.java:617) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:496) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:15172) at 88 elativeLayout.java:617) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816 ) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145) at android.view.View.measure(View.java:15172) at android .view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at androidx.appcompat.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:496) at android.view.View.measure(View.java:15172) at android.view. ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 在 android.view.View.measure(View.8821324695418788): 246184094188.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) at android.view.View.measure(View.java:15172) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.8 246184094188.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout .onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.FrameLayout.onMeasure(FrameLayout. java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) at android.view.View.measure(View.java:15172) at android.view.ViewRootImpl.performMeasure(ViewRootImpl .java:1850) 在 android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.8) 8213246945888:1275) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android. 8213246945888:1275) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) at android.view.Choreographer$CallbackRecord.run(Choreographer.java :725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app. ActivityThread.Main(ActivityThread.java88888888888888888)at java8.lang.reflect.Method.Invokenative.invokenative(本机方法)(88213213246945888.LANG.RANG.RANG.RANG.RANG.MEND88888888888888888888888888.8888.888.888.888.888.88888.8888.888.88.88.88.88. and) internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f0700a5 a=-1 r=0x7f0700a5} at android.content.res.Resources.loadDrawable(Resources.java:1897) at android.content.res.TypedArray.getDrawable(TypedArray.java:601) at android.widget.ImageView.(ImageView.java:120) at android.widget.ImageButton.(ImageButton.java:87) at androidx.appcompat.widget.AppCompatImageButton.(AppCompatImageButton.java:78) at androidx.appcompat.widget.AppCompatImageButton.(AppCompatImageButton.java:73) at androidx.appcompat.app.AppCompatViewInflater.createImageButton(AppCompatViewInflater.java:226) at androidx.appcompat.a internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: android. content.res.Resources$NotFoundException:资源不是 Drawable(颜色或路径):TypedValue{t=0x1/d=0x7f0700a5 a=-1 r=0x7f0700a5} 在 android.content.res.Resources.loadDrawable(Resources.java :1897) at android.content.res.TypedArray.getDrawable(TypedArray.java:601) at android.widget.ImageView.(ImageView.java:120) at android.widget.ImageButton.(ImageButton.java:87) at androidx .appcompat.widget.AppCompatImageButton.(AppCompatImageButton.java:78) 在 androidx.appcompat.widget.AppCompatImageButton.(AppCompatImageButton.java:73) 在 androidx.appcompat.app.AppCompatViewInflater.createImageButton(AppCompatViewInflater.882132888:73) 在 android:224586246x应用程序兼容性.a pp.AppCompatViewInflater.create pp.AppCompatViewInflater.create

And this line is the one I was referring to earlier:这一行就是我之前提到的那一行:

at com.example.juegocartas3.Adapter.getView(Adapter.java:41)在 com.example.juegocartas3.Adapter.getView(Adapter.java:41)

v = inflater.inflate(R.layout.grid_view_items, null);

try replacing尝试更换

View v = convertView;
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.grid_view_items, null);

with

View v = getApplicationContext().getLayoutInflater().inflate(R.layout.grid_view_items, null);

It is likely that you do not have your drawable files for your cards in the proper drawable folder based on the API level you are running.根据您正在运行的 API 级别,您可能没有将卡片的可绘制文件放在正确的可绘制文件夹中。 For example, if the files are in /drawable-26 , when you run your app on API 25 that would be the error you would get.例如,如果文件位于/drawable-26中,当您在 API 25 上运行您的应用程序时,您将收到此错误。

If the drawables for your cards are not specific to an API level, move them to the /drawable folder.如果卡片的可绘制对象不是特定于 API 级别,请将它们移动到/drawable文件夹。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM