Friday, December 11, 2009

Re: [android-developers] GridView in a ListView: results are unusable the way it is now

ListView and GridView are not meant to be embedded within one another
(the same is true with ScrollView.) And when I say they are not meant
to, it's not supported to do so.

On Fri, Dec 11, 2009 at 6:53 AM, Brion Emde <brione2001@gmail.com> wrote:
> 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 android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscribe@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>

--
Romain Guy
Android framework engineer
romainguy@android.com

Note: please don't send private questions to me, as I don't have time
to provide private support. All such questions should be posted on
public forums, where I and others can see and answer them

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

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate