DrawerLayout出错

时间:2015-04-14 16:24:09

标签: android gridview drawerlayout

当我尝试使用GridView和DrawerLayout打开Activity时,出现错误:

04-14 16:16:44.203    2226-2226/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.proyectotaes.proyecto1, PID: 2226
    java.lang.IllegalArgumentException: DrawerLayout must be measured with MeasureSpec.EXACTLY.
            at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:814)
            at android.view.View.measure(View.java:17430)
            at android.widget.GridView.onMeasure(GridView.java:1074)
            at android.view.View.measure(View.java:17430)
            at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
            at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
            at android.view.View.measure(View.java:17430)
            at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851)
            at android.view.View.measure(View.java:17430)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
            at android.view.View.measure(View.java:17430)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
            at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
            at android.view.View.measure(View.java:17430)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
            at android.view.View.measure(View.java:17430)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
            at android.view.View.measure(View.java:17430)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
            at android.view.View.measure(View.java:17430)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
            at android.view.Choreographer.doCallbacks(Choreographer.java:580)
            at android.view.Choreographer.doFrame(Choreographer.java:550)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

这是活动的代码:

XML:

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

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context="com.example.proyectotaes.proyecto1.usuarios">

        <GridView
            android:id="@+id/gridView"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"

            />

        <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <com.example.proyectotaes.proyecto1.SquareImageView
                android:id="@+id/picture"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                />

            <TextView
                android:id="@+id/text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:paddingTop="15dp"
                android:paddingBottom="10dp"
                android:textColor="@android:color/white"
                android:layout_gravity="bottom"
                android:background="#55000000" />

        </FrameLayout>
    </RelativeLayout>

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

的活动:

public class usuarios extends ActionBarActivity {

private ArrayList<String> datos;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_usuarios);


    //Caso de prueba, luego sera la consulta a la base de datos
    datos = new ArrayList<String>();
    datos.add("Dario");
    datos.add("Marcelito");
    datos.add("Sagal");
    datos.add("Miguel");
    datos.add("Antonio");
    datos.add("Agustin");

    GridView grid = (GridView) findViewById(R.id.gridView);

    //se pasan los datos recogidos de la base de datos
    grid.setAdapter(new MyAdapter(this, datos));

}

MyAdapter:

public class MyAdapter extends BaseAdapter {
private List items = new ArrayList();
private LayoutInflater inflater;

public MyAdapter(Context context, ArrayList<String> datos)
{
    inflater = LayoutInflater.from(context);

    //se cargan todos los nombres "datos"
    for(int i = 0 ; i<datos.size(); i++)
    {
        items.add(new Item(datos.get(i), R.drawable.colores));
    }
}

@Override public int getCount()
{
    return items.size();
}

@Override public Object getItem(int i)
{
    return items.get(i);
}

@Override public long getItemId(int i)
{
    //return items.get(i).drawableId;
    return 4;
}

@Override public View getView(int i, View view, ViewGroup viewGroup)
{
    View v = view;
    ImageView picture;
    TextView name;

    if(v == null)
    {
        v = inflater.inflate(R.layout.activity_usuarios, viewGroup, false);
        v.setTag(R.id.picture, v.findViewById(R.id.picture));
        v.setTag(R.id.text, v.findViewById(R.id.text));
    }

    picture = (ImageView)v.getTag(R.id.picture);
    name = (TextView)v.getTag(R.id.text);
    Item item = (Item)getItem(i);
    picture.setImageResource(item.drawableId);
    name.setText(item.name);
    return v;
}

 private class Item
{
    final String name;
    final int drawableId;

    Item(String name, int drawableId)
    {
        this.name = name;
        this.drawableId = drawableId;
    }
}
}

1 个答案:

答案 0 :(得分:0)

您为R.layout.activity_usuarios中的每一行夸大了MyAdapter,而不是特定于GridView的布局。

这导致每行内部都有DrawerLayoutGridViewListView,这可能不是您想要的。