without studio hacer gridlayout example como cardview android android-gridview baseadapter

hacer - gridview android studio example



Android: BaseAdapter y getLayoutInflater en un archivo de clase separado (4)

Ahora mismo, para rellenar mis GridViews, estoy usando una clase extendida de BaseAdapter en cada una de mis actividades de Android (que son la mayoría)

Para facilitar la lectura y el mantenimiento, estoy intentando colocar todo el código de BaseAdapter en un archivo de clase separado.

Para poblar el GridView, estoy usando LayoutInflater, y aquí es donde las cosas se ponen difíciles ...

Dado que getLayoutInflater () proviene de android.Activity , simplemente no funcionará. Intenté hacer de Adapter.java (la clase para poblar GridViews) una clase de actividad extendida, y luego crear la clase BaseAdapter (la forma en que lo hago ahora), 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 llamarlo 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));

La aplicación se ejecuta, pero cuando intento rellenar, obtuve una excepción NullPointerException getLayoutInflater ().

¿Alguien sabe lo que me falta o cómo hacerlo funcionar correctamente?


Hay más formas de obtener un objeto LayoutInflater que directamente desde una Activity . De hecho, getLayoutInflater() es probablemente solo un método conveniente para esto:

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

Por favor, consulte la documentación de LayoutInflater .


La mejor manera es usar un método LayoutInflator Objeto LayoutInflator con applicationcontext como único parámetro para obtener el inflador.


Lee esto...

Fundamentos de la aplicación

... especialmente el bit en Actividades en la sección Componentes de la aplicación.

NO intente crear una instancia de una Activity usando una new . Una Activity es una clase de Android de casos especiales y NO debe ser tratada como una clase Java normal. Una Activity solo debe iniciarse utilizando un Intent y es responsabilidad del sistema operativo Android crear una instancia.

En otras palabras, nunca hagas esto ...

Adapter MyGridAdapter = new Adapter();

Además, Adapter es el nombre de una clase de widget de Android por lo que no es una buena opción para el nombre de una de sus propias clases.

EDITAR: También vea mi respuesta a esta pregunta here acerca de cómo crear una clase de ayuda y pasarle el Context la actividad.


debe pasar el contexto de MainActivity cuando cree un objeto de la clase que amplíe baseadapter algo como esto LayoutInflater inflater = ((Activity)MyContext)).getLayoutInflater;

¡esto convertiría MyContext en una actividad y luego se podría llamar a GetLayoutInflater ()!