0

Случайно я наткнулся на эту уникальную находку. Мой код сломался, потому что я получал NullPointerException на моем адаптере после реализации LoaderManager, если раньше у меня не было исключения.Почему ListView.setAdapter (null) исключает исключение нулевого указателя?

Итак, я взял отладчик и шагнул через мой OnCreate метод:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    mDrawerListView = (ListView) inflater.inflate(
      R.layout.fragment_navigation_drawer, container, false); 

    // Irrelevant code removed 

    mDrawerListView.setAdapter(mAccountAdapter); 
    return mDrawerListView; 
} 

нерелевантные код просто включать добавление вид колонтитулов и установка onClickListeners, но ни разу в этом методе (или любой другой) я назначить что-то до mAccountAdapter. Я знаю, что должен, и я собираюсь, но я сделал ошибку, забыв это сделать.

Когда я использую отладчик и устанавливаю точку останова в строке setAdapter(mAccountAdapter), я вижу, что mAccountAdapter имеет значение null. Тем не менее, я могу перешагнуть через него и двигаться дальше, не получая исключение нулевого указателя. Почему мне разрешено передавать нулевое значение в эту функцию?

ответ

4

Почему я могу передать нулевое значение в эту функцию?

Почему бы вам не быть? В конце концов, ListView начинается с адаптера null при его создании. Если вы посмотрите на the source for ListView и его предков, у них есть много проверок, если mAdapter (элемент данных, который будет удерживать текущий ток Adapter) равен null.

+0

Я сделал несколько шагов, но ничего не понял. Возможно, я должен занять некоторое время и пойти немного медленнее. Я понятия не имел, что это началось с нулевого адаптера, и, зная это, это имеет смысл. – AdamMc331

Смежные вопросы