Hito_kun Hito_kun - 1 year ago 161
Android Question

Android: BaseAdapter and getLayoutInflater on separate class file

Right now to populate my GridViews I'm using a extended BaseAdapter class on each of my Android Activities (which are most of them).

In order to make it easier to read and maintain, I`m trying to put all the BaseAdapter code in a separate class file.

To populate the GridView, I'm using LayoutInflater, and here is where stuff gets tricky...

Since the getLayoutInflater() comes from

, it just won't do the trick. I tried making my Adapter.java(the class to populate the GridViews) a extended Activity class, and then inside create the BaseAdapter class (the way I do it right now), but I haven't been able to make it work properly.

Here's how Adapter.java looks:

package com.cimp.matitec;

import greendroid.app.GDActivity;
import android.content.Context;
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 Adapter extends GDActivity{

public class ImageAdapter extends BaseAdapter
Context MyContext;
int count;
String[] nombre;

public ImageAdapter(Context _MyContext, int n, String[] nombre)
MyContext = _MyContext;
count = n;
this.nombre = nombre;

public int getCount()
/* Set the number of element we want on the grid */
return count;

public View getView(int position, View convertView, ViewGroup parent)
View MyView = convertView;

if ( convertView == null )
/*we define the view that will display on the grid*/

//Inflate the layout
LayoutInflater li = getLayoutInflater();
MyView = li.inflate(R.layout.grid_item, null);

// Add The Text!!!
TextView tv = (TextView)MyView.findViewById(R.id.grid_item_text);

// Add The Image!!!
ImageView iv = (ImageView)MyView.findViewById(R.id.grid_item_image);

return MyView;

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

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

To call it from the outside, I do the following:

Adapter MyGridAdapter = new Adapter();
MyGrid = (GridView)findViewById(R.id.grid);
MyGrid.setAdapter(MyGridAdapter.new ImageAdapter(this, 6, nombreTema));

The app runs, but when trying to populate, I got a NullPointerException getLayoutInflater().

Someone knows what I'm missing, or how to make it work properly?

Answer Source

There are more ways to get a LayoutInflater object than directly from an Activity. As a matter of fact, getLayoutInflater() is probably just a convenience method for this:

LayoutInflater li = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Please see the documentation for LayoutInflater.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download