android.view.InflateException:二进制XML文件行#40:错误膨胀类TextView

时间:2015-05-28 11:46:10

标签: android android-inflate

我正在尝试学习Android Studio,以制作可在Android中运行的程序。我尝试通过这种方式将FrameLayout扩展为LinearLayout(代码位于 - > HotelListFragment.java):

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.list_row, parent, false);
        return new ViewHolder(view, this);
    }

但每次进入View view = inflater.inflate(R.layout.list_row, parent, false)我都会收到此错误:

    android.view.InflateException: Binary XML file line #40: Error inflating class TextView
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
            at com.global.wins.ui.HotelListFragment$AttractionAdapter.onCreateViewHolder(HotelListFragment.java:113)
            at com.global.wins.ui.HotelListFragment$AttractionAdapter.onCreateViewHolder(HotelListFragment.java:98)
            at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4783)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4089)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3999)
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1892)
            at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:419)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1301)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:534)
            at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:156)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2411)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2709)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:907)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2356)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2069)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6637)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:814)
            at android.view.Choreographer.doCallbacks(Choreographer.java:614)
            at android.view.Ch
05-28 17:43:01.246  14785-14785/com.global.wins E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.global.wins, PID: 14785
    android.view.InflateException: Binary XML file line #40: Error inflating class TextView
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
            at com.global.wins.ui.HotelListFragment$AttractionAdapter.onCreateViewHolder(HotelListFragment.java:113)
            at com.global.wins.ui.HotelListFragment$AttractionAdapter.onCreateViewHolder(HotelListFragment.java:98)
            at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4783)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4089)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3999)
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1892)
            at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:419)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1301)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:534)
            at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:156)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2411)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2709)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:907)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
            at android.view.View.layout(View.java:15762)
            at android.view.ViewGroup.layout(ViewGroup.java:4880)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2356)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2069)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6637)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:814)
            at android.view.Choreographer.doCallbacks(Choreographer.java:614)
            at android.view.Ch

这是我的main.xml:

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main">

<FrameLayout android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<FrameLayout
    android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navigation_drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    class="com.global.wins.ui.HotelListFragment"
    tools:layout="@layout/fragment_drawer" />

这是我的HotelListFragment.java:

public class HotelListFragment extends Fragment {

private AttractionAdapter mAdapter;
private int mImageSize;

public HotelListFragment() {}
private String country;
private View mFragmentContainerView;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private boolean mUserLearnedDrawer;
private boolean mFromSavedInstanceState;

private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";

private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Load a larger size image to make the activity transition to the detail screen smooth
    mImageSize = getResources().getDimensionPixelSize(R.dimen.image_size)
            * Constants.IMAGE_ANIM_MULTIPLIER;

    country = TouristAttractions.COUNTRY;
    List<Attraction> attractions = ATTRACTIONS.get(country);
    mAdapter = new AttractionAdapter(getActivity(), attractions);

    View view = inflater.inflate(R.layout.fragment_list_hotel, container, false);
    AttractionsRecyclerView recyclerView =
            (AttractionsRecyclerView) view.findViewById(android.R.id.list);
    recyclerView.setEmptyView(view.findViewById(android.R.id.empty));
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new GridLayoutManager(
            getActivity(), getResources().getInteger(R.integer.list_columns)));
    recyclerView.setAdapter(mAdapter);

    return view;
}

private class AttractionAdapter extends RecyclerView.Adapter<ViewHolder>
        implements ItemClickListener {

    public List<Attraction> mAttractionList;
    private Context mContext;

    public AttractionAdapter(Context context, List<Attraction> attractions)      
    {
        super();
        mContext = context;
        mAttractionList = attractions;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.list_row, parent, false);
        return new ViewHolder(view, this);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Attraction attraction = mAttractionList.get(position);

        holder.mTitleTextView.setText(attraction.name);
        holder.mDescriptionTextView.setText(attraction.description);
        Glide.with(mContext)
                .load(attraction.imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .placeholder(R.drawable.empty_photo)
                .override(mImageSize, mImageSize)
                .into(holder.mImageView);

        if (TextUtils.isEmpty(country)) {
            holder.mOverlayTextView.setVisibility(View.GONE);
        } else {
            holder.mOverlayTextView.setVisibility(View.VISIBLE);
            holder.mOverlayTextView.setText("Visit");
        }
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

    @Override
    public void onItemClick(View view, int position) {
        View heroView = view.findViewById(android.R.id.icon);
        DetailActivity.launch(
                getActivity(), mAdapter.mAttractionList.get(position).name, heroView);
    }
}

private static class ViewHolder extends RecyclerView.ViewHolder
        implements View.OnClickListener {

    TextView mTitleTextView;
    TextView mDescriptionTextView;
    TextView mOverlayTextView;
    ImageView mImageView;
    ItemClickListener mItemClickListener;

    public ViewHolder(View view, ItemClickListener itemClickListener) {
        super(view);
        mTitleTextView = (TextView) view.findViewById(android.R.id.text1);
        mDescriptionTextView = (TextView) view.findViewById(android.R.id.text2);
        mOverlayTextView = (TextView) view.findViewById(R.id.overlaytext);
        mImageView = (ImageView) view.findViewById(android.R.id.icon);
        mItemClickListener = itemClickListener;
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        mItemClickListener.onItemClick(v, getPosition());
    }
}

interface ItemClickListener {
    void onItemClick(View view, int position);
}

public void setUp(int fragmentId, DrawerLayout drawerLayout) {
    mFragmentContainerView = getActivity().findViewById(fragmentId);
    mDrawerLayout = drawerLayout;

    // set a custom shadow that overlays the main content when the drawer opens
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);


    // set up the drawer's list view with items and click listener

    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);

    // ActionBarDrawerToggle ties together the the proper interactions
    // between the navigation drawer and the action bar app icon.
    mDrawerToggle = new ActionBarDrawerToggle(
            getActivity(),                    /* host Activity */
            mDrawerLayout,                    /* DrawerLayout object */
            R.drawable.ic_drawer,             /* nav drawer image to replace 'Up' caret */
            R.string.navigation_drawer_open,  /* "open drawer" description for accessibility */
            R.string.navigation_drawer_close  /* "close drawer" description for accessibility */
    ) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            if (!isAdded()) {
                return;
            }

            getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            if (!isAdded()) {
                return;
            }

            if (!mUserLearnedDrawer) {
                // The user manually opened the drawer; store this flag to prevent auto-showing
                // the navigation drawer automatically in the future.
                mUserLearnedDrawer = true;
                SharedPreferences sp = PreferenceManager
                        .getDefaultSharedPreferences(getActivity());
                sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
            }

            getActivity().supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
        }
    };

    // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer,
    // per the navigation drawer design guidelines.
    if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
        mDrawerLayout.openDrawer(mFragmentContainerView);
    }

    // Defer code dependent on restoration of previous instance state.
    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mDrawerToggle.syncState();
        }
    });

    mDrawerLayout.setDrawerListener(mDrawerToggle);
}

private ActionBar getActionBar() {
    return ((ActionBarActivity) getActivity()).getSupportActionBar();
   }
  }

这是我的list_row.xml:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:foreground="?attr/selectableItemBackground"
    android:layout_height="@dimen/image_size">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/relativeLayoutTravel">

    <ImageView
        android:id="@android:id/icon"
        android:layout_width="@dimen/image_size"
        android:layout_height="match_parent"
        android:src="@drawable/empty_photo"
        android:scaleType="centerCrop"
        android:contentDescription="@string/description"
        android:transitionName="image" />

    <TextView
        android:id="@+id/overlaytext"
        android:layout_width="@dimen/image_size"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@android:id/icon"
        android:gravity="center"
        android:padding="@dimen/tiny_margin"
        style="?android:textAppearanceSmallInverse"
        android:background="@color/text_background"
        tools:text="Overlay"/>

    <TextView
        android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@android:id/icon"
        android:paddingTop="@dimen/small_margin"
        android:paddingLeft="@dimen/small_margin"
        android:paddingRight="@dimen/small_margin"
        android:maxLines="1"
        android:ellipsize="end"
        style="?android:textAppearanceMedium"
        tools:text="Title 1"
        android:transitionName="image" />

    <TextView
        android:id="@android:id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="@dimen/small_margin"
        android:ellipsize="end"
        android:maxLines="4"
        style="?android:textAppearanceSmall"
        tools:text="Description goes here"
        android:layout_toEndOf="@android:id/icon"
        android:layout_below="@android:id/text1" />

    </RelativeLayout>

   </FrameLayout>

有人会帮助我吗?因为我不知道还有什么我必须做的。

0 个答案:

没有答案