Monday 13 June 2011

Custom GridView In Android With ImageView and TextView

Every one want to do some thing with android ListView and GridView and Much More.
Here is the Example of Custom GridView in Which we have used ImageView and TextView below it.
Now One more thing that is this custom gridview can also done by the using View ,But i done it as shown in my code using Class Like what you want to put in grid just put it in gridview xml file and also make class ViewHolder as done by me in this tutorials .

Here below is my class for the GridView

public class Gridview extends Activity {
    GridView mGridViewl;
    //Context mContext = Gridview.this;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mGridViewl = (GridView) findViewById(R.id.gridview);
        mGridViewl.setAdapter(new EfficientAdapter(this));

    }
   
    private static class EfficientAdapter extends BaseAdapter{
        private LayoutInflater mLayoutInflater;
        public EfficientAdapter(Context context){
            mLayoutInflater=LayoutInflater.from(context);
        }
       
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public View getView(int position, View converView, ViewGroup parent) {
            ViewHolder mVHolder;
            if(converView == null){
                converView=mLayoutInflater.inflate(R.layout.customgrid, parent, false);
                mVHolder=new ViewHolder();
                mVHolder.mImageView=(ImageView)converView.findViewById(R.id.imgview);
                mVHolder.mTextView=(TextView)converView.findViewById(R.id.text);
                mVHolder.mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                mVHolder.mImageView.setPadding(8,8,8,8);
                converView.setTag(mVHolder);
            }else{
                mVHolder=(ViewHolder)converView.getTag();
            }
            mVHolder.mImageView.setImageResource(mThumbIds[position]);
            mVHolder.mTextView.setText(COUNTRIES[position]);
           
            return converView;
        }
       
    }
   
    static class ViewHolder{
        ImageView mImageView;
        TextView mTextView;
    }

    static final String[] COUNTRIES = new String[] { "Afghanistan", "Albania",
            "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla",
            "Antarctica", "Antigua and Barbuda", "Argentina" };

   

    private static  Integer[] mThumbIds = { R.drawable.android,
            R.drawable.android1, R.drawable.android2,
            R.drawable.android3, R.drawable.android4,
            R.drawable.android5, R.drawable.android6, R.drawable.android7,
            R.drawable.android8, R.drawable.android9 };
}

and here is my main.xml  file for setcontentView(); in my activity

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <GridView    android:id="@+id/gridview"
                android:stretchMode="columnWidth"
                 android:cacheColorHint="#00000000"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:numColumns="3"
                android:clipChildren="true"
                android:horizontalSpacing="5dip"
                android:verticalSpacing="5dip">
    </GridView>
</LinearLayout>


here is the another file of customgrid.xml  for use in gridview

<?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"
  >
      <ImageView
      android:src="@drawable/android"
      android:scaleType="center"
      android:cropToPadding="true"
      android:adjustViewBounds="true"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imgview"
      android:layout_gravity="center"/>
     
      <TextView
      android:text="@string/hello"
     android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/text"
      android:layout_gravity="center_horizontal"
      />
 
</LinearLayout>

Here is the Out Put Image of my Device



7 comments:

  1. I'm a community leader on a network of developer websites.  I really liked your blog content and thought you might be interested in some extra exposure on our sites.  Send me an email at ross [at] dzone [dot] com and I can explain all the details.

    ReplyDelete
  2. Hai
    Thanks for Nice tutorial....
    how to put a listner for grid items?

    ReplyDelete
  3. How to add a method to open new activity when you click on grid item, each item makes another activity ?

    thanks for help

    ReplyDelete
  4. @Jakub Węgliński,
    Check out this Link...
    http://mindstick.com/Articles/4ed9bee8-c214-471f-bcc5-3dd743dbb2ab/?Using%20GridView%20in%20Android%20Application

    It might be useful for you.

    ReplyDelete
  5. Jakub Węgliński: to open new activity u have to applay this

    mViewHolder.mImageView.setOnClickListener( new OnClickListener() {

    public void onClick(View v) {
    // TODO Auto-generated method stub
    System.out.println(position);
    Intent it=new Intent(getApplicationContext(),Product_Info.class);
    Object[] elements=productid.toArray();
    productidforref=elements[position].toString();
    it.putExtra(commonTags.productid, productidforref);
    startActivity(it);
    }
    });

    ReplyDelete