这是我的getView()方法。在膨胀时我得到空指针异常。对于同样的问题,有很多答案。这是在片段中使用的。但这不适合我。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Context con = null;
View vi=convertView;
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)con.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.stores_listview_layout, null);
}
TextView tv = (TextView)vi.findViewById(R.id.store_name);
tv.setText(storeData.get(position).get("merchantName"));
return vi;
}
我在这里做的错误是什么?
更新:这有效!
View vi=convertView;
Context c = null;
if(convertView==null){
LayoutInflater inflater = getLayoutInflater(null);
vi = inflater.inflate(R.layout.stores_listview_layout, parent, false);
}
答案 0 :(得分:4)
LayoutInflater inflater = getLayoutInflater(null);
vi = inflater.inflate(R.layout.stores_listview_layout, parent, false);
答案 1 :(得分:3)
而不是声明Context con;
然后使用它 - 正如所指出的那样导致空指针异常,你可以简单地使用convertView.getContext()
检查文档here
刚刚实际考虑过,我的第一个想法是行不通的 - Doh!
由于您的代码位于片段内,因此您可以通过getActivity()
访问layoutinflaterpublic View getView (int position, View convertView, ViewGroup parent){
if( convertView == null ){
//you can access layout inflater by accessing hosting activity
convertView = getActivity().getLayoutInflater().inflate(R.layout.stores_listview_layout, parent, false);
}
TextView tv = (TextView)convertView.findViewById(R.id.store_name);
tv.setText(storeData.get(position).get("merchantName"));
return convertView;
}
答案 2 :(得分:1)
con.getApplicationContext()...
这是你的错。 con
尚未初始化,因此为null
。
您应该将您的活动用作上下文。
答案 3 :(得分:0)
这里
Context con;///============> here
View vi=convertView;
if(convertView==null){
LayoutInflater inflater = (LayoutInflater)con.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.stores_listview_layout, null);
....
将Context con;
替换为
Context con= getApplicationContext();
这里的代码中你没有初始化Context变量。尝试先将其初始化。