title: Custom adapter for GridView in Android
body: <p>I'm getting data from DB and displayed in a <code>GridView</code> fine. But I need to put a separate button below each text displayed. When I click the button, I have to do some stuff. Here I used a custom list adapter for retrieved data from DB. How could I do that?</p>
  
  <p>My code:</p>
  
  <pre><code>public class HomePage extends Activity  {
      private ArrayList&lt;SingleElementDetails&gt; allElementDetails=new ArrayList&lt;SingleElementDetails&gt;();
      DBAdapter db=new DBAdapter(this);
      String category, description;
      String data;
      String data1;
      GridView gridview;
      Button  menu;
  
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.homepage);
  
          menu=(Button)findViewById(R.id.menus);
  
          menu.setOnClickListener(new OnClickListener() {
              public void onClick(View v)
              {
                  gridview=(GridView)findViewById(R.id.gridview);
                  allElementDetails.clear();
                  db.open();
                  long id;
                  //id=db1.insertTitle1(category, description,r_photo);
                  Cursor cursor = db.getAllTitles1();
                  while (cursor.moveToNext())
                  {
                      SingleElementDetails single=new SingleElementDetails();
                      single.setCateogry(cursor.getString(1));
                      single.setDescription(cursor.getString(2));
                      single.setImage(cursor.getBlob(3));
                      allElementDetails.add(single);
                  }
                  db.close();
                  CustomListAdapter adapter=new CustomListAdapter(HomePage.this,allElementDetails);
                  gridview.setAdapter(adapter);
              }
          });
      }
  }
  </code></pre>
  
  <p>My customListAdapter:</p>
  
  <pre><code>import java.io.ByteArrayInputStream;
  import java.util.ArrayList;
  
  import android.content.Context;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.BaseAdapter;
  import android.widget.ImageView;
  import android.widget.TextView;
  
  public class CustomListAdapter extends BaseAdapter {
      private  ArrayList&lt;SingleElementDetails&gt; allElementDetails;
  
      private LayoutInflater mInflater;
  
      public CustomListAdapter(Context context, ArrayList&lt;SingleElementDetails&gt; results) {
          allElementDetails = results;
          mInflater = LayoutInflater.from(context);
      }
  
      public int getCount() {
          return allElementDetails.size();        
      }
  
      public Object getItem(int position) {
          return allElementDetails.get(position);
      }
  
      public long getItemId(int position) {
          return position;
      }
  
      public View getView(int position, View convertView, ViewGroup parent) 
      {
          convertView = mInflater.inflate(R.layout.listview1, null);
          ImageView imageview = (ImageView) convertView.findViewById(R.id.image);
          TextView textview = (TextView) convertView.findViewById(R.id.category_entry);
          TextView textview1 = (TextView) convertView.findViewById(R.id.description_entry);
          textview.setText(allElementDetails.get(position).getCategory());
          textview1.setText(allElementDetails.get(position).getDescription());
  
          byte[] byteimage=allElementDetails.get(position).getImage();
          ByteArrayInputStream imageStream = new ByteArrayInputStream(byteimage);
          BitmapFactory.Options op=new BitmapFactory.Options();
          op.inSampleSize=12;
          Bitmap theImage= BitmapFactory.decodeStream(imageStream,null,op);
          imageview.setImageBitmap(theImage);
          return convertView;
      }
  }
  </code></pre>