3

这是我的 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);
        }
4

4 回答 4

5
LayoutInflater inflater = getLayoutInflater(null);
vi = inflater.inflate(R.layout.stores_listview_layout, parent, false);
于 2012-10-15T11:13:01.570 回答
3

而不是声明Context con;然后使用它 - 正如所指出的那样导致空指针异常,您可以简单地使用convertView.getContext()

在此处查看文档


刚刚真正考虑过它,我的第一个想法是行不通的——Doh!

由于您的代码在片段内,您可以通过getActivity()访问 layoutinflater

public 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;
}
于 2012-10-15T11:11:59.303 回答
1
con.getApplicationContext()...

这是你的错。con还没有初始化,所以是null. 您应该使用 Activity 作为上下文。

于 2012-10-15T11:08:53.867 回答
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 变量。尝试先初始化它。

于 2012-10-15T11:11:07.587 回答