Ошибка при раздувании XML android.support.v7.widget.CardView

Опубликован первый вопрос, ура!

Здравствуйте, я реализую библиотеки CardView и RecyclerView, которые теперь включены в библиотеку поддержки Android версии 7, но когда приложение запускается, оно завершает работу при раздувании макета CardView. Я много искал в Интернете и нашел несколько полезных вещей, но проблема остается.

Я импортировал библиотеки CardView и RecyclerView в соответствии с приведенными здесь инструкциями: https://developer.android.com/tools/support-library/setup.html#libs-with-res (я использую Eclipse), а затем добавил их в список библиотек на которые ссылается приложение, которое я создаю (в разделе "Свойства проекта" > "Android" > "Библиотеки"). Но похоже, что по крайней мере библиотека CardView не импортирована должным образом, или зависимости неправильные, или что-то еще, потому что код кажется правильным.

Вот соответствующий фрагмент части с RecyclerView:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
    mLayout = (RelativeLayout) inflater.inflate(R.layout.fragment_jamboree_info, container, false);
    return mLayout;
}

@Override
public void onActivityCreated(@Nullable
Bundle savedInstanceState) {

    RecyclerView recList = (RecyclerView) mLayout.findViewById(R.id.cardList);
    recList.setHasFixedSize(true);
    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    recList.setLayoutManager(llm);

    // make and set the adapter
    CardAdapter adapter = new CardAdapter(mDataSet);
    recList.setAdapter(adapter);

    super.onActivityCreated(savedInstanceState);
}

Вот R.layout.fragment_jamboree_info:

<?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"
    tools:context=".activities.MainActivity" >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/cardList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activities.MainActivity" />    
</RelativeLayout>

А вот код CardAdapter:

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {

private ArrayList<ParseObject> mDataSet;

public CardAdapter(ArrayList<ParseObject> dataSet) {
    mDataSet = dataSet;
}

// Size of the dataset (invoked by the layout manager)
@Override
public int getItemCount() {
    return mDataSet.size();
}

/** Provide a reference to the type of views that you are using (custom ViewHolder) */
public static class ViewHolder extends RecyclerView.ViewHolder {
    protected TextView vTitle;

    public ViewHolder(View v) {
         super(v);
         vTitle = (TextView) v.findViewById(R.id.TV_title);
    }
}

// Create new views (invoked by the layout manager)
@Override   
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());

    // ** This is where it crashes ** // 
    View v = inflater.inflate(R.layout.card_jamboree_info, viewGroup, false);

    return new ViewHolder(v);
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
    viewHolder.vTitle.setText(mDataSet.get(0).getString("title"));
}

}

А вот R.layout.card_jamboree_info -- похоже, проблема в этом CardView...

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_margin="8dp"
    android:orientation="vertical"
    android:background="@color/grey_light"
    card_view:cardCornerRadius="5dp" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white" >

        <TextView
            android:id="@+id/TV_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="16dp"
            android:textSize="32sp"
            android:text="@string/basic_error" />

    </RelativeLayout>
</android.support.v7.widget.CardView>

Наконец, рискуя получить слишком много информации, вот журнал ошибок:

01-21 23:00:10.964: D/AndroidRuntime(15128): Shutting down VM
01-21 23:00:10.980: E/AndroidRuntime(15128): FATAL EXCEPTION: main
01-21 23:00:10.980: E/AndroidRuntime(15128): Process: com.evoqe, PID: 15128
01-21 23:00:10.980: E/AndroidRuntime(15128): android.view.InflateException: Binary XML file line #2: Error inflating class android.support.v7.widget.CardView
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.LayoutInflater.createView(LayoutInflater.java:633)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at com.evoqe.adapters.CardAdapter.onCreateViewHolder(CardAdapter.java:56)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at com.evoqe.adapters.CardAdapter.onCreateViewHolder(CardAdapter.java:1)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4121)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3431)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3340)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1810)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1306)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1269)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:523)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:1988)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2237)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:890)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.View.layout(View.java:15596)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewGroup.layout(ViewGroup.java:4966)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
01-21 23:00:10.980: E/AndroidRuntime(15128):    at andro

Код кажется правильным, поэтому я подозреваю, что проблема связана с зависимостями. При написании кода я следовал этим двум руководствам:

http://www.binpress.com/tutorial/android-l-recyclerview-and-cardview-tutorial/156 и treyrobinson.net/blog/android-l-tutorials-part-3-recyclerview-and-cardview/

Любая помощь очень ценится! Заранее спасибо.


person aaronbowen    schedule 22.01.2015    source источник
comment
Вы добавили библиотеку cardview в качестве зависимости в свой файл gradle?   -  person Rachit Mishra    schedule 22.01.2015
comment
с eclipse проблема, почему бы не использовать студию? также eclipse adt больше не находится в разработке!   -  person Rachit Mishra    schedule 22.01.2015


Ответы (2)


Я думаю, вам нужно импортировать библиотеки CardView, RecycleView и appcompat_v7 внутренне, например, сначала удалить appcompat_v7 из вашего проекта как *Project>properties>Android> удалить Apply и Ok *, а затем импортировать reclyce View , Card View и appcompat_v7 и (appcompat_v4, если он необходимо) с вашего жесткого диска в папку библиотек вашего проекта, а затем добавьте его из проекта> Свойства> JavaBuildPath> Добавить банку вместо Добавить внешнюю банку, затем выберите библиотеки из папки библиотек вашего проекта. Затем Вам нужно изменить тему в styles.xml.

  <style name="AppBaseTheme" parent="Theme.AppCompat.Light">

to

<style name="AppBaseTheme" parent="@android:style/Theme.Holo.Light">

и то же самое в других стилях.xml

поскольку Appcompat.Light больше не поддерживается после удаления .

Потом чисти и беги. Надеюсь, это может сработать!

person abbyandrew    schedule 22.01.2015

Если вы пробовали все из решений, вам нужно проверить эту небольшую ошибку, которую я сделал раньше.

если ваш файл манифеста имеет целевую версию SDK 21. не ниже этого.

  <uses-sdk
        android:minSdkVersion="11" //anything you need
        android:targetSdkVersion="21" />

потому что, перепробовав все в Интернете, я решил ошибку раздувания recyclerview, изменив цель с 17 на 21.

может быть, это может помочь кому-то в будущем, а не тратить дни на это, как я.

person WonderSoftwares    schedule 23.06.2015