出处:www.csdn.net
看一下我之前写的那篇文章GridView,ImageAdapter2的getView()方法,我让大家过来看看的。
那样写肯定是正确的,但是一开始学的时候不是这么写的。
我是这样做的:
构造方法只有默认的,没有传递一个Context对象过来,ImageAdapter2又不是GridViewActivity2得内部类。所以只能new出个对象了
当然下面的这个运行的时候会报错,而且两种方法抛出的异常还不是同一个异常
对于为什么不能new,恕我现在也不清楚。如果哪位MM知道,一定要通知一下~~
if (convertView == null) {
// LayoutInflater inflater = LayoutInflater
.from(new GridViewActivity2());//wrong
// LayoutInflater inflater = (LayoutInflater)new GridViewActivity2()
.getLayoutInflater();//wrong
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = (View) inflater.inflate(R.layout.griditem2, null);
}
大家也都知道,解决办法很多的。
①我现在一般都是采用为ImageAdapter2提供一个构造方法和一个私有属性
private Context mContext;
public ImageAdapter2(Context c) {
mContext = c;
}
然后再为Activity中的控件(比如GridView)绑定adapter的时候,直接传递个this就好了
gridview.setAdapter(new ImageAdapter2(this));
②当然使用内部类也是可以很好的解决的。
这个时候ImageAdapter2就不需要那个构造函数了,一个默认的就够了。
生成LayoutInflater对象的时候:
LayoutInflater inflater = LayoutInflater.from(GridViewActivity2.this);为控件绑定adapter的时候:
gridview.setAdapter(new ImageAdapter2());
总之,要清楚我们的思路,下面就很好解决了。对这儿不懂的话,建议去看看我写的ListView(SimpleAdapter),我感觉这个我写的非常详细了。不过可能有些地方我讲的不到位,因为我也是边学边写这个的。以后我发现哪些不足的地方我会去改进的。