3

これが私のgetView()メソッドです。膨張中にnullポインタ例外が発生します。同じ質問に対する答えはたくさんあります。これはフラグメント内で使用されます。しかし、それは私には合いません。

@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;てからそれを使用する代わりに-指摘されているように、nullポインタ例外を引き起こしているので、単に使用することができます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。アクティビティをコンテキストとして使用する必要があります。

于 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 に答える