【问题标题】:Error inflating XML android.support.v7.widget.CardView膨胀 XML android.support.v7.widget.CardView 时出错
【发布时间】:2015-01-22 16:44:33
【问题描述】:

发布的第一个问题,哇!

你好, 我正在实现现在包含在 v7 android 支持库中的 CardView 和 RecyclerView 库,但是当应用程序运行时,它会在扩展 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/

非常感谢任何帮助!提前致谢。

【问题讨论】:

  • 你是否在你的 gradle 文件中添加了 cardview lib 作为依赖项?
  • 用eclipse有问题,为什么不用studio呢? eclipse adt 也不再处于开发阶段!

标签: android eclipse android-fragments android-recyclerview android-cardview


【解决方案1】:

我认为您需要在内部导入库 CardView、RecycleView 和 appcompat_v7 ,例如首先从项目中删除 appcompat_v7 作为 *Project>properties>Android > 删除 Apply 和 Ok * 然后导入 reclyce View 、 Card View 和 appcompat_v7 和( appcompat_v4(如果需要)从您的 HardDrive 将其添加到您的项目 libs 文件夹中,然后从 project>Properties>JavaBuildPath >Add Jar 而不是 Add external Jar 添加它,然后从您的项目 libs 文件夹中选择库。然后您需要更改styles.xml 中的主题

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

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

和其他styles.xml一样

因为 Appcompat.Light 在删除后不再受支持。

然后清理并运行。希望它可能有效!

【讨论】:

    【解决方案2】:

    如果您已经尝试了所有解决方案,那么需要检查我之前犯过的这个小错误。

    如果您的清单文件的目标 sdk 版本为 21。不低于这个。

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

    因为在互联网上尝试了所有方法后,我通过将目标从 17 更改为 21 解决了 recyclerview 膨胀错误。

    这可能对将来的某人有所帮助,而不是像我一样浪费时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多