Question

Both phone and emulator are 2.2.

Trying to create a gridview with a custom SimpleCursorAdapter class. The gridview contains a image and text view.

The code below works perfectly on the emulator but nothing shows up when I try it on the phone.

I have noticed that only the constructor is called from the phone (not newView or bindView)! Any help?

public class GridAdapter extends SimpleCursorAdapter {
       private Context context; 
       private int mLayout;

       public GridAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) {
           super(context, layout, c, from, to);

           this.context = context;
           mLayout = layout;

        }

       @Override
       public View newView(Context context, Cursor cursor, ViewGroup parent) {
           Cursor c = getCursor();

           final LayoutInflater inflater = LayoutInflater.from(context);
           View v = inflater.inflate(mLayout, null);

           v.setLayoutParams(new GridView.LayoutParams(150,150));


           return v;

       }

       @Override
       public void bindView(View v, Context context, Cursor c) {

           int nameCol = c.getColumnIndex("show_title");

           String name = c.getString(nameCol);


           TextView tv = (TextView) v.findViewById(R.id.textView1);
           if (name != null) {

               tv.setText(name);
           }

           ImageView iv = (ImageView) v.findViewById(R.id.album_image);
           iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
           iv.setImageResource(R.drawable.icon);
       }

    }

Here is my main xml file:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/gridview"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>

Here is my view for each grid position:

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"            
  android:id = "@+id/single_item_id"  
  android:layout_width="fill_parent"
 android:layout_height="fill_parent"      
 android:orientation="vertical"
 > 
  <ImageView
  android:id = "@+id/album_image"
  android:adjustViewBounds="true"
  android:layout_width = "fill_parent"             
  android:layout_height="wrap_content"/>

  <TextView 
  android:text="TextView" 
  android:id="@+id/textView1" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content"/>

 </LinearLayout>

And finally here is my onCreate(well some of it):

gridview = (GridView) findViewById(R.id.gridview);
Cursor c = mDbHelper.fetchAllShows();
int[] to = new int[] {R.id.name};
GridAdapter ga = new GridAdapter(this,R.layout.icon,c,new String[] {"show_title"},
            to);
gridview.setAdapter(ga);

(and yes, I know I am doign nothing with the imageview inside of each position yet).

Was it helpful?

Solution 2

I ended up taking Herrmann's advice here. I removed the reference to the context and to the cursor. Also renamed the gridview in my layout and changed the appropriate references in my code.

OTHER TIPS

Please go through the following link this is a tutorial for the grid view, listview etc- http://mobiforge.com/designing/story/understanding-user-interface-android-part-3-more-views . Let me share my code with you:

main.xml
---------------
     <?xml version="1.0" encoding="utf-8"?>
        <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <GridView
                android:id="@+id/gridv"
                android:layout_width="wrap_content" 
                android:layout_height="fill_parent"
                android:numColumns="auto_fit"
                android:verticalSpacing="10dp"
                android:horizontalSpacing="10dp"
                android:columnWidth="90dp"
                android:stretchMode="columnWidth"
                android:gravity="center"/>

        </FrameLayout>

Gridview.java
------------------------

        public class Gridview extends Activity {
            private  GridView gridview;
            /** Called when the activity is first created. */
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                gridview = (GridView)findViewById(R.id.gridv);
                gridview.setAdapter(new ImageAdapter(this));
            }

        }



 ImageAdapter.java
    ----------------------

        public class ImageAdapter extends BaseAdapter {
            private int imagpos;
            private Context mContext;

            public ImageAdapter(Context c) {
                mContext = c;
            }

            public int getCount() {
                return mThumbIds.length;
            }

            public Object getItem(int position) {
                return null;
            }

            public long getItemId(int position) {
                return 0;
            }

            // create a new ImageView for each item referenced by the Adapter
            public View getView(final int position, View convertView, ViewGroup parent) {
                ImageView imageView;
                if (convertView == null) {  // if it's not recycled, initialize some attributes
                    imageView = new ImageView(mContext);
                    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setPadding(8, 8, 8, 8);

                    imageView.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View view) {
                          Log.d("onClick","position ["+position+"]");
                          imagpos= position;
                        }

                      });

                } else {
                    imageView = (ImageView) convertView;
                }

                imageView.setImageResource(mThumbIds[position]);
                return imageView;
            }

            // references to our images
            private Integer[] mThumbIds = {
                    R.drawable.imag, R.drawable.download,
                    R.drawable.images, R.drawable.imag,
                    R.drawable.images, R.drawable.download
            };


 }

In the AndroidManifest.xml only add: <activity android:name=".Gridview" />

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top