You should always set the whole content of the layout in getView(). When
"v" is not null right now you are returning that view without setting your
text.
Something like this:
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater li = (LayoutInflater)
mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.grid_item, null);
}
TextView tv = (TextView)v.findViewById(R.id.grid_item_text);
tv.setText("Item #"+mItems.get(position));
return v;
}
On Tue, Nov 29, 2011 at 5:17 PM, Kumar Bibek <[email protected]> wrote:
> What exactly is the problem. "Bonkers" doesn't really tell us much.
>
> On Nov 29, 8:12 pm, authorwjf <[email protected]> wrote:
> > Hi Android Framework Gurus!
> >
> > I am hoping someone out there can answer a question for me about re-
> > using views in my adapters. My understanding, is that for performance
> > reasons this is something I should always always always do. Yet in my
> > experience, doing so always results in the view, whether a grid or
> > list, going wonky once I get very many children in the view. I
> > suspect, I'm just doing something flat out wrong. So I put together a
> > simple straight-forward project to demonstrate both how I attempt to
> > re-use the views in a grid view, and how it goes bonkers if you add a
> > few hundred entries and scroll the list. I've tested on both the
> > cupcake emulator as well as my gingerbread device with the same
> > results.
> >
> > Thanks in advance to anyone who takes the time to respond!
> >
> > ==Layouts==
> > main.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:layout_width="fill_parent"
> > android:layout_height="wrap_content"
> > android:text="Reuse Views Demo" />
> > <GridView
> > android:id="@+id/gridview"
> > android:layout_width="fill_parent"
> > android:layout_height="fill_parent"
> > android:padding="5dp"
> > android:verticalSpacing="5dp"
> > android:horizontalSpacing="10dp"
> > android:numColumns="auto_fit"
> > android:columnWidth="60dp"
> > android:stretchMode="columnWidth"
> > android:gravity="center_horizontal"/>
> > </LinearLayout>
> >
> > grid_item.xml
> > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
> > android"
> > android:id="@+id/GridItem"
> > android:layout_width="fill_parent"
> > android:layout_height="wrap_content"
> > android:orientation="vertical"
> > android:gravity="center_horizontal">
> > <TextView android:id="@+id/grid_item_text"
> > android:layout_width="wrap_content"
> > android:layout_height="wrap_content"
> > android:gravity="center_horizontal"
> > android:layout_marginBottom="4dip"/>
> > </LinearLayout>
> >
> > ==source==
> > Main.java
> > package com.authorwjf.reuseviews;
> >
> > import java.util.ArrayList;
> >
> > import android.app.Activity;
> > import android.os.Bundle;
> > import android.widget.GridView;
> >
> > public class Main extends Activity {
> >
> > private CustomAdapter mAdapter;
> > private ArrayList<String> mItems = new ArrayList<String>();
> >
> > @Override
> > public void onCreate(Bundle savedInstanceState) {
> > super.onCreate(savedInstanceState);
> > setContentView(R.layout.main);
> > for (int i = 0; i<200; i++) {
> > mItems.add(Integer.toString(i));
> > }
> > mAdapter = new CustomAdapter(this, mItems);
> > GridView g = (GridView) findViewById(R.id.gridview);
> > g.setAdapter(mAdapter);
> > }
> >
> > }
> >
> > CustomAdapter.java
> > package com.authorwjf.reuseviews;
> > import java.util.ArrayList;
> > import com.authorwjf.reuseviews.R;
> > import android.content.Context;
> > import android.view.LayoutInflater;
> > import android.view.View;
> > import android.view.ViewGroup;
> > import android.widget.BaseAdapter;
> > import android.widget.TextView;
> >
> > public class CustomAdapter extends BaseAdapter {
> >
> > private Context mContext;
> > private ArrayList<String> mItems;
> >
> > public CustomAdapter(Context c, ArrayList<String> items) {
> > mContext = c;
> > mItems = items;
> > }
> >
> > @Override
> > public int getCount() {
> > return mItems.size();
> > }
> >
> > @Override
> > public Object getItem(int position) {
> > return mItems.get(position);
> > }
> >
> > @Override
> > public long getItemId(int position) {
> > return position;
> > }
> >
> > @Override
> > public View getView(int position, View convertView, ViewGroup
> parent)
> > {
> > View v = convertView;
> > if (v == null) {
> > LayoutInflater li = (LayoutInflater)
> > mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
> > v = li.inflate(R.layout.grid_item, null);
> > TextView tv =
> (TextView)v.findViewById(R.id.grid_item_text);
> > tv.setText("Item #"+mItems.get(position));
> > }
> > return v;
> > }
> >
> >
> >
> >
> >
> >
> >
> > }
>
> --
> 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
>
--
YuviDroid
Check out Launch-X <http://android.yuvalsharon.net/launchx.php> (a widget
to quickly access your favorite apps and contacts!)
http://android.yuvalsharon.net
--
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