Ahora mismo para poblar mis GridViews estoy utilizando una clase BaseAdapter extendida en cada una de mis actividades de Android (que son la mayoría de ellas).Android: BaseAdapter y getLayoutInflater en un archivo de clase separado
Para facilitar la lectura y el mantenimiento, intento poner todo el código BaseAdapter en un archivo de clase separado.
para poblar el GridView, estoy usando LayoutInflater, y aquí es donde las cosas se complica ...
Desde el getLayoutInflater() proviene de android.Activity
, simplemente no va a hacer el truco. Intenté hacer que mi Adapter.java (la clase para poblar las GridViews) una clase de actividad extendida, y luego crear la clase BaseAdapter (la forma en que lo hago ahora mismo), pero no he podido hacer que funcione correctamente.
Así es como se ve Adapter.java:
//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;
}
}
}
Para llamar desde el exterior, hago lo siguiente:
//MainClass.java
Adapter MyGridAdapter = new Adapter();
MyGrid = (GridView)findViewById(R.id.grid);
MyGrid.setAdapter(MyGridAdapter.new ImageAdapter(this, 6, nombreTema));
Las carreras de aplicaciones, pero cuando se trata de llenar, tengo una NullPointerException getLayoutInflater().
¿Alguien sabe lo que me falta, o cómo hacer que funcione correctamente?
¿GDActivity extiende 'Activity'? – Squonk
Sí, es una actividad Greendroid –
Desde la perspectiva OO, el adaptador no es una actividad, su código simplemente no es razonable. Busca la simplicidad, pero termina con el tiempo y la complejidad, la forma en que Google recomienda podría no ser la más perfecta, pero es la más razonable y eficiente, al menos la OMI. – yorkw