gpt4 book ai didi

安卓.view.InflateException : Binary XML file line ###: Error inflating class in RecyclerView

转载 作者:行者123 更新时间:2023-11-29 15:46:24 26 4
gpt4 key购买 nike

真的很烦恼。

当我在任何隔离 Activity 或 fragment 中使用 TintImageView 或 FloatingActionButton 时,它们一切顺利。

但是当我在 RecyclerView 中使用它们时,出现了这个异常:android.view.InflateException:

android.view.InflateException: Binary XML file line #79: Error inflating class "unknown"

完整版如下:

5882-5882/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.*********, PID: 5882
android.view.InflateException: Binary XML file line #79: Error inflating class <unknown>
at android.view.LayoutInflater.createView(LayoutInflater.java:640)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:775)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:778)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:778)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:778)
at android.view.LayoutInflater.inflate(LayoutInflater.java:512)
at android.view.LayoutInflater.inflate(LayoutInflater.java:409)
at com.*********.ui.adapters.CreditList_MineAdapter.onCreateViewHolder(CreditList_MineAdapter.java:33)
at com.*********.ui.adapters.CreditList_MineAdapter.onCreateViewHolder(CreditList_MineAdapter.java:23)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5288)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4551)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1371)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:581)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1627)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1551)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1460)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1551)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1460)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14878)
at android.view.ViewGroup.layout(ViewGroup.java:4655)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1697)
at android.widget.LinearLayout.layoutVertical

好的,我会发布我的源代码。

这是我的gradle:

android {
compileSdkVersion 23
buildToolsVersion "22.0.1"

defaultConfig {
applicationId "com.*******"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:cardview-v7:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
compile 'com.android.support:palette-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
...
}

和 RecyclerView 项目布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
android:id = "@+id/card_root"
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:card = "http://schemas.android.com/apk/res-auto"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:background = "?android:attr/selectableItemBackground"
card:cardBackgroundColor = "#F1CC9D"
card:cardCornerRadius = "0dp"
card:cardElevation = "4dp"
card:cardPreventCornerOverlap = "true"
card:cardUseCompatPadding = "true"
card:contentPadding = "4dp">

<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "vertical"
android:weightSum = "100">

<FrameLayout
android:layout_width = "match_parent"
android:layout_height = "32dp">

<TextView
android:id = "@+id/text_name"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:layout_gravity = "left|center_vertical"
android:gravity = "center_vertical"
android:maxLines = "2"
android:paddingLeft = "8dp"
android:paddingRight = "8dp"
android:singleLine = "true"
android:text = "****\n****"
android:textColor = "@color/primary_dark_material_dark"
android:textSize = "16sp"
android:textStyle = "bold"/>

</FrameLayout>

<View
android:layout_width = "match_parent"
android:layout_height = "1dp"
android:layout_gravity = "bottom"
android:layout_marginLeft = "8dp"
android:layout_marginRight = "8dp"
android:background = "#7B030B"/>

<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "32dp"
android:orientation = "horizontal"
android:weightSum = "2">

<RelativeLayout
android:layout_width = "0dp"
android:layout_height = "32dp"
android:layout_weight = "1">

<android.support.v7.widget.CardView
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_margin = "4dp"
android:layout_weight = "128"
card:cardBackgroundColor = "@android:color/transparent"
card:cardElevation = "-2dp">

<android.support.v7.internal.widget.TintImageView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:src = "@mipmap/ic_today_black_48dp"
android:tint = "?attr/colorPrimaryDark"/>
</android.support.v7.widget.CardView>

<TextView
android:id = "@+id/text_deadline"
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_alignParentRight = "true"
android:layout_centerVertical = "true"
android:gravity = "right|center_vertical"
android:paddingLeft = "8dp"
android:paddingRight = "8dp"
android:text = "2015-01-01"
android:textColor = "@color/primary_dark_material_dark"
android:textSize = "16sp"/>

</RelativeLayout>

<RelativeLayout
android:layout_width = "0dp"
android:layout_height = "32dp"
android:layout_weight = "1">

<android.support.v7.widget.CardView
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_margin = "4dp"
android:layout_weight = "128"
card:cardBackgroundColor = "@android:color/transparent"
card:cardElevation = "-2dp">

<android.support.v7.internal.widget.TintImageView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:src = "@mipmap/ic_credit_card_black_48dp"
android:tint = "?attr/colorPrimaryDark"/>
</android.support.v7.widget.CardView>

<TextView
android:id = "@+id/text_credit"
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_alignParentRight = "true"
android:layout_centerVertical = "true"
android:gravity = "right|center_vertical"
android:paddingLeft = "8dp"
android:paddingRight = "8dp"
android:text = "0987654321"
android:textColor = "#7B020B"
android:textSize = "16sp"/>

</RelativeLayout>
</LinearLayout>

<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "32dp"
android:orientation = "horizontal"
android:weightSum = "2">

<RelativeLayout
android:layout_width = "0dp"
android:layout_height = "32dp"
android:layout_weight = "1">

<android.support.v7.widget.CardView
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_margin = "4dp"
android:layout_weight = "128"
card:cardBackgroundColor = "@android:color/transparent"
card:cardElevation = "-2dp">

<android.support.v7.internal.widget.TintImageView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:src = "@mipmap/ic_assignment_ind_white_48dp"
android:tint = "?attr/colorPrimaryDark"/>
</android.support.v7.widget.CardView>

<TextView
android:id = "@+id/text_postedby"
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_alignParentRight = "true"
android:layout_centerVertical = "true"
android:gravity = "right|center_vertical"
android:paddingLeft = "8dp"
android:paddingRight = "8dp"
android:text = "null"
android:textColor = "@color/primary_dark_material_dark"
android:textSize = "16sp"/>

</RelativeLayout>

<RelativeLayout
android:layout_width = "0dp"
android:layout_height = "32dp"
android:layout_weight = "1">

<android.support.v7.widget.CardView
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_margin = "4dp"
android:layout_weight = "128"
card:cardBackgroundColor = "@android:color/transparent"
card:cardElevation = "-2dp">

<android.support.v7.internal.widget.TintImageView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_gravity = "center"
android:src = "@mipmap/ic_local_grocery_store_white_48dp"
android:tint = "?attr/colorPrimaryDark"/>
</android.support.v7.widget.CardView>

<TextView
android:id = "@+id/text_usedby"
android:layout_width = "wrap_content"
android:layout_height = "match_parent"
android:layout_alignParentRight = "true"
android:layout_centerVertical = "true"
android:gravity = "right|center_vertical"
android:paddingLeft = "8dp"
android:paddingRight = "8dp"
android:text = "null"
android:textColor = "@color/primary_dark_material_dark"
android:textSize = "16sp"/>

</RelativeLayout>
</LinearLayout>

</LinearLayout>

<ImageView
android:id = "@+id/image"
android:layout_width = "100dp"
android:layout_height = "100dp"
android:layout_gravity = "right|top"
android:layout_margin = "8dp"
android:src = "@mipmap/ic_seal_used"
android:visibility = "gone"/>
</android.support.v7.widget.CardView>

RecyclerView Adapter 是这样的:

public class CreditList_MineAdapter
extends BaseRecyclerAdapter< CreditList_MineAdapter.CreditViewHolder, Credit > {

public CreditList_MineAdapter ( Context context, ArrayList< Credit > list ) {
super( context, list );
}
@Override
public CreditViewHolder onCreateViewHolder ( ViewGroup parent, int viewType ) {
CreditViewHolder holder = new CreditViewHolder(
LayoutInflater.from( mContext )
.inflate( R.layout.listitem_credit_list_mine, parent, false )
);
return holder;
}
@Override
protected void onBindViewHolderBase ( CreditViewHolder holder, int position ) {
final Credit mCreditAtPosition = mList.get( position );

holder.mTextView_Name.setText( mCreditAtPosition.getName() );
holder.mTextView_Credit.setText( mCreditAtPosition.getCredit() );
try {
holder.mTextView_End.setText(
mCreditAtPosition.getDeadLineDate() == null ? "" : Credit.YYYY_MM_DD.format(
Credit.YYYY_MM_DD.parse( mCreditAtPosition.getDeadLineDate().getDate() )
)
);
}
catch ( ParseException e ) {
e.printStackTrace();
}
holder.mTextView_PostBy.setText(
mCreditAtPosition.getPostedBy() == null ? "" :
TextUtils.isEmpty( mCreditAtPosition.getPostedBy().getUsername() ) ?
mCreditAtPosition.getPostedByName() :
mCreditAtPosition.getPostedBy().getUsername()

);
holder.mTextView_UsedBy.setText(
mCreditAtPosition.getUsedBy() == null ? "" :
TextUtils.isEmpty( mCreditAtPosition.getUsedBy().getUsername() ) ?
mCreditAtPosition.getUsedByName() :
mCreditAtPosition.getUsedBy().getUsername()
);
if ( mCreditAtPosition.isUsed() ) {
holder.mCardView.setCardBackgroundColor( R.color.material_design_colors_grey_500 );
holder.mImageView.setVisibility( View.VISIBLE );
holder.mImageView.setImageResource( R.mipmap.ic_seal_used );
return;
}
if ( mCreditAtPosition.isOutOfDate() ) {
holder.mCardView.setCardBackgroundColor( R.color.material_design_colors_grey_600 );
holder.mImageView.setVisibility( View.VISIBLE );
holder.mImageView.setImageResource( R.mipmap.ic_seal_outofdate );
return;
}
holder.mCardView.setCardBackgroundColor( Color.parseColor( "#F1CC9D" ) );
holder.mImageView.setVisibility( View.GONE );
}

class CreditViewHolder extends RecyclerView.ViewHolder {
@InjectView ( R.id.text_name )
TextView mTextView_Name;
@InjectView ( R.id.text_credit )
TextView mTextView_Credit;
@InjectView ( R.id.text_deadline )
TextView mTextView_End;
@InjectView ( R.id.text_postedby )
TextView mTextView_PostBy;
@InjectView ( R.id.text_usedby )
TextView mTextView_UsedBy;
@InjectView ( R.id.card_root )
CardView mCardView;
@InjectView ( R.id.image )
ImageView mImageView;

public CreditViewHolder ( View view ) {
super( view );
ButterKnife.inject( this, view );
}
}
}

错误日志指向这一行:

CreditViewHolder holder = new CreditViewHolder( LayoutInflater.from( mContext ) .inflate( R.layout.listitem_credit_list_mine, parent, false ) );

我在 SOF 上尝试过一些类似的问题,但没有一个能像这样解决我的问题。所以我希望有人能给我提示?非常感谢!

抱歉我的英语不好!

抱歉,我忘了说我的设备操作系统是 Android 4.4.2 API19。

编辑:

另外,fragment中的代码

 mList = new ArrayList< Credit >();
switch (mPosition) {
case POSITION_0_FRESH:
mAdapter =
new CreditList_FreshAdapter( getActivity().getApplicationContext(), mList );
mAdapter.setRecyclerViewOnItemClickLitener( this );
break;
case POSITION_1_USED:
case POSITION_2_USEDBYME:
mAdapter =
new CreditList_UsedAdapter( getActivity().getApplicationContext(), mList );
break;
case POSITION_3_POSTBYME:
mAdapter =
new CreditList_MineAdapter( getActivity().getApplicationContext(), mList );
break;
case POSITION_4_OUTOFDATE:
mAdapter = new CreditList_OutofDateAdapter(
getActivity().getApplicationContext(), mList
);
break;
default:
mAdapter =
new CreditList_FreshAdapter( getActivity().getApplicationContext(), mList );
break;
}
mRecyclerView.setAdapter( mAdapter );
mRecyclerView.setLayoutManager( new LinearLayoutManager( getActivity() ) );

BaseRecyclerAdapter 是这样的:

public abstract class BaseRecyclerAdapter < VH extends RecyclerView.ViewHolder, T >
extends RecyclerView.Adapter< VH > {

protected Context mContext;
protected List< T > mList;
protected RecyclerViewOnItemClickLitener mRecyclerViewOnItemClickLitener;
public BaseRecyclerAdapter ( Context inContext, List< T > inList ) {
this.mContext = inContext;
this.mList = inList;
}
public T getItemAtPosition ( int inPosition ) {
if ( mList != null ) {
return mList.get( inPosition );
}
return null;
}
public void setRecyclerViewOnItemClickLitener (
RecyclerViewOnItemClickLitener mRecyclerViewOnItemClickLitener
) {
this.mRecyclerViewOnItemClickLitener = mRecyclerViewOnItemClickLitener;
}
@Override
public void onBindViewHolder ( final VH holder, int position ) {
onBindViewHolderBase( holder, position );
if ( mRecyclerViewOnItemClickLitener != null ) {
holder.itemView.setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick ( View v ) {
if ( mRecyclerViewOnItemClickLitener != null )
mRecyclerViewOnItemClickLitener.onItemClick(
holder.itemView, holder.getLayoutPosition()
);
}
}
);
holder.itemView.setOnLongClickListener(
new View.OnLongClickListener() {

@Override
public boolean onLongClick ( View v ) {
if ( mRecyclerViewOnItemClickLitener != null )
mRecyclerViewOnItemClickLitener.onItemLongClick(
holder.itemView, holder.getLayoutPosition()
);
return false;
}
}
);
}
}
protected abstract void onBindViewHolderBase ( VH holder, int position );

@Override
public int getItemCount () {
return mList == null ? 0 : mList.size();
}

最佳答案

android:background="?attr/selectableItemBackground" 引起了几个膨胀问题,如果没有必要,只需将其删除并重试或者一起尝试

android:clickable="true"
android:focusable="true"
android:background="?android:attr/selectableItemBackground"

关于安卓.view.InflateException : Binary XML file line ###: Error inflating class <unknown> in RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32757856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com