BaseAdapter getView()方法中的LayoutInflater中的NullPointerException

时间:2012-10-15 11:07:09

标签: android android-fragments android-adapter

这是我的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 个答案:

答案 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()

访问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;
}

答案 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变量。尝试先将其初始化。