NullPointerException в LayoutInflater внутри метода BaseAdapter getView()


Вот мой метод 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 2

4 ответа:

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

Вместо объявления Context con; и последующего его использования - что, как указывалось, вызывает исключение нулевого указателя, вы можете просто использовать convertView.getContext()

Проверьте документы здесь


Я только что подумал об этом, и моя первая мысль не сработала-дох!

Поскольку ваш код находится внутри фрагмента, вы можете получить доступ к layoutinflater через 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;
}
con.getApplicationContext()...

Вот твоя вина. con еще не был инициализирован, так что это null. Вы должны использовать свою деятельность в качестве контекста.

Здесь

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

Здесь в этом коде вы не инициализировали контекстную переменную. попробуйте сначала инициализировать его.