现在,为了填充我的GridViews,我在我的每个Android活动(大多数都是)上使用了一个扩展的BaseAdapter类。
为了便于阅读和维护,我尝试将所有的BaseAdapter代码放在一个单独的类文件中。
为了填充GridView,我使用了LayoutInflater,这就是事情变得棘手的地方……
因为getLayoutInflater()来自android.Activity
,所以它不会起作用。我尝试使我的Adapter.java(填充GridViews的类)成为一个扩展的Activity类,然后在内部创建BaseAdapter类(我现在就是这样做的),但是我一直无法使它正常工作。
下面是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;
}
}
}
要从外部调用它,我执行以下操作:
//MainClass.java
Adapter MyGridAdapter = new Adapter();
MyGrid = (GridView)findViewById(R.id.grid);
MyGrid.setAdapter(MyGridAdapter.new ImageAdapter(this, 6, nombreTema));
应用程序可以运行,但在尝试填充时,我得到了一个NullPointerException getLayoutInflater()。
有人知道我错过了什么,或者知道如何让它正常工作吗?
发布于 2011-12-29 08:27:18
除了直接从Activity
获取LayoutInflater
对象之外,还有更多的方法可以获取。事实上,getLayoutInflater()
可能只是一种方便的方法:
LayoutInflater li = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
请参阅LayoutInflater
的文档。
发布于 2014-12-22 17:49:15
在创建扩展baseadapter的类的对象时,应该传递MainActivity的上下文,如下所示的LayoutInflater inflater = ((Activity)MyContext)).getLayoutInflater;
这会将MyContext强制转换为活动,然后可以调用GetLayoutInflater()!!
发布于 2017-07-16 01:30:35
最好的方法是使用一个静态方法LayoutInflator
对象,并将applicationcontext作为唯一的参数来获取膨胀器。
https://stackoverflow.com/questions/8662494
复制相似问题