Sign up ×
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join them; it only takes a minute:

It really bothered a lot.

When I use TintImageView or FloatingActionButton in any isolate activities or fragments, they all goes well.

But when I use them in RecyclerView, there comes out this exception: android.view.InflateException:

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

Here is the complete edition:

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

OK I'll post my source code.

Here is my 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'
...
}

And RecyclerView item layout:

<?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>

And RecyclerView Adapter goes like this:

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

The error log pointed at this line:

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

I've tried some similar questions on SOF but none of them can solve my problem like this. So I hope someone can give me a hint? Thanks a lot!

Sorry for my bad English!

Sorry I forgot to metion that my device os is Android 4.4.2 API19 .

edited:

In addition, the code in 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() ) );

And the BaseRecyclerAdapter goes like this:

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

}

share|improve this question
    
place a break point inside LayoutInflater.createView and dubug your code, so simple! – pskink Sep 24 at 10:04
    
show your activity code where you are initializing recycler view – Android Weblineindia Sep 24 at 10:28
    
@Android Weblineindia activity code is posted, and if I remove TintImageView in listitem layout, it will run correctly! – AlaricNorris Sep 25 at 1:14

1 Answer 1

I think you have not initialised the mContext Variable.Initialise it within the CreditList_MineAdapter() constructor as mContext=context.Try this.Hope it might help.

share|improve this answer
    
Actually I did this. I have refacted a parent Adapter named "BaseRecyclerAdapter" and in that class I did initiate the protected field mContext. As you can see this CreditList_MineAdapter extends BaseRecyclerAdapter. – AlaricNorris Sep 24 at 14:23
    
In fact I think if the mContext haven't been initiated "LayoutInflater.from( mContext )" may throws some exception like null pointer or something. – AlaricNorris Sep 24 at 14:25

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.