Android: BaseAdapter and getLayoutInflater on separate class file-ThrowExceptions

Exception or error:

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 android.Activity, it just won’t do the trick. I tried making my 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 looks:

package com.cimp.matitec;

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(;

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

      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(;
MyGrid.setAdapter( 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?

How to solve:

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.


you should pass the context of MainActivity when creating an object of the class that extends baseadapter
something like this
LayoutInflater inflater = ((Activity)MyContext)).getLayoutInflater;

this would cast MyContext to an Activity and then GetLayoutInflater() could be called!!


Read this…

Application Fundamentals

…especially the bit on Activities in the Application Components section.

Do NOT try to instantiate an Activity using new. An Activity is a special-case Android class and should NOT be treated like a regular Java class. An Activity should only be started using an Intent and it’s the Android OS’s responsibility for instantiating it.

In other words, never do this…

Adapter MyGridAdapter = new Adapter();

Also, Adapter is the name of an Android widget class so not a good choice for the name of one of your own classes.

EDIT: Also see my answer to this question here about creating a helper class and passing the activity’s Context to it.


The best way is to use a static method LayoutInflator object with applicationcontext as the only parameter to get inflator.

Leave a Reply

Your email address will not be published. Required fields are marked *