2012-10-15 116 views
2

这里是我的getView()方法。充气时我得到空指针异常。同样的问题有很多答案。这用在一个片段中。但那不适合我。BaseAdapter中的LayoutInflater中的NullPointerException 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; 
} 

我在这里做的错误是什么?

更新:This Works!

  View vi=convertView; 
     Context c = null; 
     if(convertView==null){ 
     LayoutInflater inflater = getLayoutInflater(null); 
     vi = inflater.inflate(R.layout.stores_listview_layout, parent, false); 
     } 
+0

访问layoutinflater ??? –

+1

上下文con永远不会初始化 –

+1

而不是con.getApplicationContext(),请尝试使用您的Activity的上下文。 –

回答

4
LayoutInflater inflater = getLayoutInflater(null); 
vi = inflater.inflate(R.layout.stores_listview_layout, parent, false); 
+0

这种方法是在一个片段 – intrepidkarthi

+0

你试试吗? – mukesh

+0

是的。我尝试过这个。没有工作 – intrepidkarthi

1
con.getApplicationContext()... 

这里是你的错。 con尚未初始化,所以它是null。 你应该使用你的Activity作为上下文。

+0

它在一个片段内 – intrepidkarthi

+0

然后你可以为你的上下文调用getActivity()。 – nhaarman

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(); 

这里。尝试先初始化它。

+0

它在一个片段内 – intrepidkarthi

3

,而不用声明Context con;,然后用它 - 这是指出了导致空指针异常,你可以简单地使用convertView.getContext()

检查文档here


刚才已经真正想过这个问题,并我的第一个想法是行不通的 - Doh!

因为你的代码片段里,你可以在该行通过getActivity()

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; 
} 
+0

它在一个片段 – intrepidkarthi

+1

啊,稍微有点不同的调用到layoutinflater然后。编辑... –

相关问题