必须使用MeasureSpec.EXACTLY测量DrawerLayout

时间:2014-09-16 08:45:45

标签: android navigation-drawer

Android Studio 0.8.10

您好

我正在尝试实现导航抽屉,但我一直收到此错误。片段扩展了ListFragment,我已经覆盖了getview以扩展下面的布局。我有一个活动添加片段并初始化DrawLayar类。 我正在使用导航抽屉并具有以下布局fragment_listfott.xml

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

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

        <TextView
            android:id="@+id/tvDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:textColor="#ffc6c6c6"
            android:textSize="16sp" />

    </FrameLayout>

    <!-- Navigation drawer -->
    <LinearLayout
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@drawable/background"
        android:gravity="top"
        android:orientation="vertical">

    <ImageView
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="20dp"
        android:layout_marginTop="20dp"
        android:scaleType="fitXY"
        android:src="@drawable/logo_large"
        android:contentDescription="Picture displaying logo"/>
</LinearLayout>  
</android.support.v4.widget.DrawerLayout>

在我FottListFragment.java我有以下内容:

private class NewsFeedAdapter extends ArrayAdapter<NewsFeed> {

        public NewsFeedAdapter(ArrayList<NewsFeed> newsFeedArrayList) {
            super(getActivity(), 0, newsFeedArrayList);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if(convertView == null) {
                convertView = getActivity().getLayoutInflater().inflate(R.layout.fragment_listfott, null);
            }

            return convertView;
        }
    }

MainActivity.java我所做的所有Drawlayer的东西

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_listfott);
        if (savedInstanceState == null) {
        }

        FragmentManager fragmentManager = getFragmentManager();
        Fragment fragment = fragmentManager.findFragmentById(R.id.navi_fragment_container);

        if (fragment == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.navi_fragment_container, new FottListFragment(), "FottListFragment")
                    .commit();
        }

        /* Navigation drawer */
        mDrawerLayout = (DrawerLayout)findViewById(R.id.dlMenus);
        mDrawerToggle = new ActionBarDrawerToggle(
                this,
                mDrawerLayout,
                R.drawable.menu_btn,
                R.string.open_draw,
                R.string.close_draw) {

            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
            }

            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }
        };

        mDrawerLayout.setDrawerListener(mDrawerToggle);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

我希望有人可以指出我正确的方向,因为这已经是几天的问题了。

非常感谢提前

1 个答案:

答案 0 :(得分:1)

getView()方法中夸大的布局,在这种情况下,是使用NewsFeedAdapter的ListView的各个行的布局。由于R.layout.fragment_listfott包含了应用程序导航抽屉的DrawerLayout,因此不应该将布局充气并返回到那里。相反,该布局应该是定义行的布局,而对于简单的ArrayAdapter,通常就像SDK android.R.layout.simple_list_item_1,它只是一个TextView。