Android: BaseAdapter et getLayoutInflater sur le fichier de classe

Dès maintenant à remplir mes GridViews je suis en utilisant une étendue BaseAdapter classe sur chacun de mes Android Activités (qui sont pour la plupart d'entre eux).

Afin de le rendre plus facile à lire et à maintenir, je suis en train de mettre tous les BaseAdapter code dans un fichier de classe.

Pour remplir le GridView, je suis en utilisant LayoutInflater, et c'est là où les choses deviennent difficiles...

Depuis le getLayoutInflater() vient de android.Activity, il ne veut tout simplement pas faire l'affaire. J'ai essayé de faire mon Adapter.java(la classe pour remplir le GridViews) prolongée de l'Activité de la classe, et puis à l'intérieur de créer le BaseAdapter classe (la façon dont je le fais en ce moment), mais je n'ai pas été capable de le faire fonctionner correctement.

Voici comment Adapter.java regarde:

//Adapter.java
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;
}
@Override
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);
tv.setText(nombre[position]+"");
//Add The Image!!!           
ImageView iv = (ImageView)MyView.findViewById(R.id.grid_item_image);
iv.setImageResource(R.drawable.ic_launcher);
}
return MyView;
}
@Override
public Object getItem(int arg0) {
//TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
//TODO Auto-generated method stub
return 0;
}
}
}

Appeler ça de l'extérieur, je ne les suivants:

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

L'application s'exécute, mais lorsque j'essaie de remplir, j'ai eu une NullPointerException getLayoutInflater().

Quelqu'un sait ce que je suis absent, ou comment le faire fonctionner correctement?

  • Ne GDActivity étendre Activity?
  • Yup, est un Greendroid Activité
  • De OO point de vue, l'Adaptateur n'est pas une Activité, votre code n'est tout simplement pas raisonnable. Vous recherchez la simplicité, mais avec le temps et la complexité, la façon dont Google recommandé pourrait ne pas être le plus parfait, mais il est le plus raisonnable et efficace, au moins de l'OMI.
  • Je sais, c'est un peu bizarre, mais je ne pouvais pas trouver un autre moyen de le faire. Tout ce que je besoin est de faire de la BaseAdapter de travail
InformationsquelleAutor Hito_kun | 2011-12-28