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 ответа:
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();
Здесь в этом коде вы не инициализировали контекстную переменную. попробуйте сначала инициализировать его.