Android GridView shows items in two-dimensional scrolling grid (rows & columns) and the grid items are not necessarily predetermined but they automatically inserted to the layout using a ListAdapter
An adapter actually bridges between UI components and the data source that fill data into UI Component. Adapter can be used to supply the data to like spinner, list view, grid view etc.
The ListView and GridView are subclasses of AdapterView and they can be populated by binding them to an Adapter, which retrieves data from an external source and creates a View that represents each data entry.
grid_view_android_example.xml :
Main xml file used in GridViewExample.java filexml version="1.0" encoding="utf-8"?> android:id="@+id/gridView1" android:numColumns="auto_fit" android:gravity="center" android:columnWidth="100dp" android:stretchMode="columnWidth" android:layout_width="fill_parent" android:layout_height="fill_parent" ></GridView>GridViewAndroidExample.java :
This is Main java file to create gridview object and set Custom adapter to gridview.public class GridViewExample extends Activity {
GridView gridView;
// This Data show in grid ( Used by adapter )
static final String[ ] GRID_DATA = new String[] {
Windows" ,
"iOS",
"Android" ,
"Blackberry",
"Java" ,
"JQuery",
"Phonegap",
"SQLite",
"Thread" ,
"Video"
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.grid_view_android_example );
// Get gridview object from xml file
gridView = (GridView) findViewById(R.id.gridView1);
// Set custom adapter (GridAdapter) to gridview
gridView.setAdapter( new GridAdapter( this, GRID_DATA ) );
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v,
int position, long id) {
Toast.makeText(
getApplicationContext(),
((TextView) v.findViewById( R.id.grid_item_label ))
.getText(), Toast.LENGTH_SHORT).show();
}
});
}
}
CustomGridAdapter.java :
Custom adapter to create each element in grid view.CustomGridAdapter extends BaseAdapter and override methods.
Depending upon passed array data , getview() method called each time and create gridview elements.
GridView elements show according to external grid_item.xml file. ( Defined below )
public class CustomGridAdapter extends BaseAdapter { private Context context; private final String[] gridValues; //Constructor to initialize values public CustomGridAdapter(Context context, String[ ] gridValues) { this.context = context; this.gridValues = gridValues; } @Override public int getCount() { // Number of times getView method call depends upon gridValues.length return gridValues.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } // Number of times getView method call depends upon gridValues.length public View getView(int position, View convertView, ViewGroup parent) { // LayoutInflator to call external grid_item.xml file LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View gridView; if (convertView == null) { gridView = new View(context); // get layout from grid_item.xml ( Defined Below ) gridView = inflater.inflate( R.layout.grid_item , null); // set value into textview TextView textView = (TextView) gridView .findViewById(R.id.grid_item_label); textView.setText(gridValues[position]); // set image based on selected text ImageView imageView = (ImageView) gridView .findViewById(R.id.grid_item_image); String arrLabel = gridValues[ position ]; if (arrLabel.equals("Windows")) { imageView.setImageResource(R.drawable.windows_logo); } else if (arrLabel.equals("iOS")) { imageView.setImageResource(R.drawable.ios_logo); } else if (arrLabel.equals("Blackberry")) { imageView.setImageResource(R.drawable.blackberry_logo); } else { imageView.setImageResource(R.drawable.android_logo); } } else { gridView = (View) convertView; } return gridView; }}grid_item.xml :
Grid view column elements will look according to grid_item.xml file. android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" > <ImageView android:id="@+id/grid_item_image" android:layout_width="50px" android:layout_height="50px" android:layout_marginRight="10px" android:src="@drawable/android_logo" > </ImageView> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="0dp" android:orientation="vertical"> <TextView android:id="@+id/grid_item_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:layout_marginTop="3px" android:textSize="15px" > </TextView> <TextView android:id="@+id/grid_item_label_static" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Example" android:layout_marginTop="3px" android:textSize="12px" /> </LinearLayout> </LinearLayout>
