Here's a simple program that puts a bunch of GridViews inside a
ListView. My original question was about how the list item that has no
GridView entries, or one row of entries, still has two rows. But, upon
further examination of the included program, the worse problem is that
the GridView items that have 3 rows are cut off. The ListView is not
giving enough space to include the entire height of the taller
GridView.

Sometimes the GridViews with 3 rows can be scrolled, sometimes not.
The intention, in my real code, is to put out a variable length list
in a grid fashion and it mostly works, but for the scrolling that is
sometimes required.

Is it possible to get the GridViews to come out full size, even at the
expense of all the item views in the ListView being larger? How could
I do that?

****** GridList.java *******

package com.example.gridlist;

import java.util.ArrayList;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class GridList extends ListActivity {

    private static final String[] STRINGS = {
            "one",
            "two",
            "three",
            "four",
            "five",
            "six",
            "seven",
            "eight",
            "nine",
            "ten",
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String[] satmp = {};            // These shouldn't be needed, but I get
a class cast exception
        String[][] saatmp = {{}};       // if I use ArrayList.toArray(),
instead of ArratList.toArray(T[])

        // Build an array of 10 string arrays, which range from length
zero to length 9
        ArrayList<String[]> strings_array = new ArrayList<String[]>();
        ArrayList<String> strings = new ArrayList<String>();
        for(int i = 0; i < 10; i++) {
                strings_array.add(strings.toArray(satmp));
                strings.add(GridList.STRINGS[i]);
        }
        MyArrayAdapter mAdapter = new MyArrayAdapter(this,
R.layout.grid, R.id.text1, strings_array.toArray(saatmp));
        this.setListAdapter(mAdapter);
    }

    // This is the "outer" adapter, the one for the ListView
        private class MyArrayAdapter extends ArrayAdapter<String[]> {

                public MyArrayAdapter(Context context, int textViewResourceId, 
int
textRes, String[][] objects) {
                        super(context, textViewResourceId, textRes, objects);
                }

                @Override
                public View getView(int position, View convertView, ViewGroup
parent) {
            LinearLayout ll;
            if (convertView == null) {
                ll = (LinearLayout) GridList.this.getLayoutInflater
().inflate(R.layout.grid, null);
            } else {
                ll = (LinearLayout) convertView;
            }
            TextView tv = (TextView) ll.findViewById(R.id.text1);
            tv.setText("Position #" + position);
            GridView gv = (GridView) ll.findViewById(R.id.gridview);
            GridAdapter ga = new GridAdapter(GridList.this,
android.R.id.text1, this.getItem(position));
            gv.setAdapter(ga);
            return ll;
        }
        }

        // This is the "inner" adapter, the one for the GridView
    private class GridAdapter extends ArrayAdapter<String>  {

                public GridAdapter(Context context, int textViewResourceId, 
String[]
objects) {
                        super(context, textViewResourceId, objects);
                }

                @Override
                public View getView(int position, View convertView, ViewGroup
parent) {
            TextView tv;
            if (convertView == null) {  // if it's not recycled,
initialize some attributes
                tv = new TextView(GridList.this);
            } else {
                tv = (TextView) convertView;
            }
            tv.setText(this.getItem(position));
            return tv;
        }
    }
}

****** AndroidManifest.xml ******

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android";
      package="com.example.gridlist"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="Grid
List">
        <activity android:label="Grid List" android:name=".GridList">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category
android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="2" />
</manifest>


****** grid.xml ******

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/
android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
>
        <TextView
                android:id="@+id/text1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />
        <GridView
            android:id="@+id/gridview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:numColumns="auto_fit"
            android:verticalSpacing="5sp"
            android:horizontalSpacing="5sp"
            android:columnWidth="90sp"
            android:stretchMode="columnWidth"
            android:gravity="center"
        />
</LinearLayout>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to