打开带有来自 attr 的颜色的新回收器视图时,应用程序崩溃

问题描述

我有 2 个活动 MainActivity 来展示一些书籍和 ViewMoreActivity 来展示更多书籍,MainActivity 完美打开而 ViewMoreActivity 打开时崩溃但是当我改变 {{ 1}} 为 textColor 形式 textViewandroid:textColor="?attr/text_color android:textColor="#000" 工作完美,那么我如何解决错误使用 ViewMoreActivity

我遇到的错误

attr

android.view.InflateException: Binary XML file line #27: Binary XML file line #27: Error inflating class android.widget.TextView Caused by: android.view.InflateException: Binary XML file line #27: Error inflating class android.widget.TextView Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:658) at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:64) at com.android.internal.policy.HwPhoneLayoutInflater.onCreateView(HwPhoneLayoutInflater.java:105) at android.view.LayoutInflater.onCreateView(LayoutInflater.java:731) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:799) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) at android.view.LayoutInflater.rInflate(LayoutInflater.java:874) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:835) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at com.example.bookstore.BookAdapter.onCreateViewHolder(BookAdapter.java:34) at com.example.bookstore.BookAdapter.onCreateViewHolder(BookAdapter.java:19) at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:7078) at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6235) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118) at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114) at androidx.recyclerview.widget.linearlayoutmanager$LayoutState.next(linearlayoutmanager.java:2303) at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:561) at androidx.recyclerview.widget.linearlayoutmanager.fill(linearlayoutmanager.java:1587) at androidx.recyclerview.widget.linearlayoutmanager.onLayoutChildren(linearlayoutmanager.java:665) at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134) at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540) at android.view.View.measure(View.java:23454) at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:792) at androidx.constraintlayout.solver.widgets.analyzer.Basicmeasure.measure(Basicmeasure.java:480) at androidx.constraintlayout.solver.widgets.analyzer.Basicmeasure.measureChildren(Basicmeasure.java:134) at androidx.constraintlayout.solver.widgets.analyzer.Basicmeasure.solverMeasure(Basicmeasure.java:277) at androidx.constraintlayout.solver.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:119) at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1578) at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1690) at android.view.View.measure(View.java:23454) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:146) at android.view.View.measure(View.java:23454) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565) at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:23454) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) 2021-01-31 05:35:37.746 3442-3442/com.example.bookstore E/AndroidRuntime: at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:23454) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565) at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:23454) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:847) at android.view.View.measure(View.java:23454) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2954) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1753) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2041) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092) at android.view.Choreographer.doCallbacks(Choreographer.java:893) at android.view.Choreographer.doFrame(Choreographer.java:812) at android.view.Choreographer$FramedisplayEventReceiver.run(Choreographer.java:1078) at android.os.Handler.handleCallback(Handler.java:907) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:216) at android.app.ActivityThread.main(ActivityThread.java:7625) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 5: TypedValue{t=0x2/d=0x7f03031d a=-1} at android.content.res.TypedArray.getColorStateList(TypedArray.java:580) at android.widget.TextView.readTextAppearance(TextView.java:3747) at android.widget.TextView.<init>(TextView.java:1122) at android.widget.TextView.<init>(TextView.java:940) at android.widget.TextView.<init>(TextView.java:936) 在设计中的 textView

recyclerView

main_activity.xml

<TextView
    android:id="@+id/TvBookName"
    android:layout_width="123dp"
    android:layout_height="wrap_content"
    android:text="@string/book_name"
    android:maxLines="2"
    android:textColor="#000"
    android:textSize="18sp"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@id/cardView" />

MainActivity.java

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.nestedScrollView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:paddingTop="45dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:showIn="@layout/app_bar_main"
        android:orientation="vertical"
        android:background="?attr/background_lite2">

        <TextView
            android:id="@+id/TvTitle1"
            style="@style/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="@string/time"
            app:layout_constraintBottom_toTopOf="@id/recyclerView"
            app:layout_constraintHorizontal_bias="0.077"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="10" />

        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:text="@string/more2"
            style="@style/viewMore"
            app:layout_constraintBottom_toTopOf="@id/recyclerView"
            app:layout_constraintHorizontal_bias="0.99"
            app:layout_constraintLeft_toRightOf="@id/TvTitle1"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.7" />

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/background_lite2"
            android:layout_marginTop="10dp"
            android:scrollbars="horizontal"
            android:scrollbarSize="0dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/TvTitle1" />

        </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.core.widget.nestedScrollView>

view_more_activity.xml

package com.example.bookstore;

import android.content.Intent;
import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.core.view.GravityCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.google.android.material.navigation.NavigationView;

import androidx.drawerlayout.widget.DrawerLayout;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.Menu;
import android.widget.Button;
import android.widget.LinearLayout;

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

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private AppBarConfiguration mAppBarConfiguration;
    SharedPref sharedPref;
    RecyclerView recyclerView,recyclerView2,recyclerView3,recyclerView4;
    BookAdapter adapter,adapter2,adapter3,adapter4;
    Button arrow,arrow2,arrow3,arrow4;
    List<Book> bookList = new ArrayList<>();
    private BookAdapter.RecyclerViewClickListener listener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        sharedPref = new SharedPref(this);
        if(sharedPref.NightMode()) {
            setTheme(R.style.DarkTheme);
        }
        else  setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        toggle.syncState();

        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        arrow = findViewById(R.id.btn1);
        arrow2 = findViewById(R.id.btn2);
        arrow3 = findViewById(R.id.btn3);
        arrow4 = findViewById(R.id.btn4);
        recyclerView = findViewById(R.id.recyclerView);
        linearlayoutmanager linearlayoutmanager = new linearlayoutmanager(this,linearlayoutmanager.HORIZONTAL,false);
        recyclerView.setLayoutManager(linearlayoutmanager);
        recyclerView.setHasFixedSize(true);
        adapter = new BookAdapter(bookList,MainActivity.this,listener);
        recyclerView.setAdapter(adapter);

        recyclerView2 = findViewById(R.id.recyclerView2);
        recyclerView3 = findViewById(R.id.recyclerView3);
        recyclerView4 = findViewById(R.id.recyclerView4);

        recyclerView2.setHasFixedSize(true);
        recyclerView3.setHasFixedSize(true);
        recyclerView4.setHasFixedSize(true);

        linearlayoutmanager linearlayoutmanager2 = new linearlayoutmanager(this,false);
        linearlayoutmanager linearlayoutmanager3 = new linearlayoutmanager(this,false);
        linearlayoutmanager linearlayoutmanager4 = new linearlayoutmanager(this,false);

        recyclerView2.setLayoutManager(linearlayoutmanager2);
        recyclerView3.setLayoutManager(linearlayoutmanager3);
        recyclerView4.setLayoutManager(linearlayoutmanager4);
        setonClicklistener();
        bookList.add(new Book("Java for Beginner2","To learn java language and programming essentials","120 LE",R.drawable.poster2));
        bookList.add(new Book("Java for Beginner",R.drawable.poster2));

        arrow.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(),ViewMoreActivity.class);
                startActivity(intent);
            }
        });
    }

    private void setonClicklistener() {
        listener = new BookAdapter.RecyclerViewClickListener() {
            @Override
            public void onClick(View v,int position) {
                Intent intent = new Intent(getApplicationContext(),BookActivity.class);
                intent.putExtra("1",bookList.get(position).getName());
                startActivity(intent);
            }
        };
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        return true;
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        int id = menuItem.getItemId();
        if (id ==R.id.nav_day){
            sharedPref.setNightModeState(false);
            restartApp();
        }
        else if (id ==R.id.nav_night){
            sharedPref.setNightModeState(true);
            restartApp();
        }

        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    public void restartApp() {
        Intent intent = getIntent();
        finish();
        startActivity(intent);
    }
}

ViewMoreActivity.java

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".ViewMoreActivity"
    android:background="?attr/background_lite2">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/toolbar2"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

BookAdaper.java

package com.example.bookstore;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;

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

public class ViewMoreActivity extends AppCompatActivity {

    RecyclerView recyclerView,adapter4;
    List<Book> bookList2 = new ArrayList<>();
    private BookAdapter.RecyclerViewClickListener listener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SharedPref sharedPref = new SharedPref(this);
        if(sharedPref.NightMode()) {
            setTheme(R.style.DarkTheme);
        }
        else  setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_more);

        Toolbar toolbar=findViewById(R.id.toolbar2);
        setSupportActionBar(toolbar);
        getSupportActionBar().setdisplayHomeAsUpEnabled(true);
        getSupportActionBar().setdisplayShowHomeEnabled(true);

        recyclerView = findViewById(R.id.recyclerView5);
        GridLayoutManager gridLayoutManager= new GridLayoutManager(this,2);
        recyclerView.setLayoutManager(gridLayoutManager);
        recyclerView.setHasFixedSize(true);
        adapter = new BookAdapter(bookList2,getApplicationContext(),listener);
        recyclerView.setAdapter(adapter);
        setonClicklistener();

        bookList2.add(new Book("Java for Beginner2",R.drawable.poster2));
        bookList2.add(new Book("Java for Beginner",R.drawable.poster2));


    }

   private void setonClicklistener() {
        listener = new BookAdapter.RecyclerViewClickListener() {
            @Override
            public void onClick(View v,bookList2.get(position).getName());
                startActivity(intent);
            }
        };
    }

    @Override
    public void onBackpressed() {
        super.onBackpressed();
    }

    @Override
    public boolean onSupportNavigateUp() {
        onBackpressed();
        return true;
    }
}

解决方法

如果 text_color 是您的 colors.xml 的一部分,请尝试使用 android:textColor = "@color/text_color" 而不是 android:textColor="?attr/text_color

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...