Я только что переключил старый проект Android от Eclipse на Android Studio, и в этом процессе я обновил из старых библиотек поддержки 19.0.1
до 22.2.0
. После этого я получаю некоторые ошибки в моем предыдущем рабочем коде. Я загрузил все SDK между ними и проверил, где ошибка сначала вошла в игру, и, похоже, она находится в версии 21.1.0
и выше. Я смотрел в release notes для этой версии, но не мог найти ничего интересного.Android: NullPointerException с помощью findFragmentById() после библиотек поддержки ugrading
Моя ошибка в том, что я получаю NullPointerException
здесь. Обратите внимание, что этот метод является частью Activity
, а не родителем Fragment
.
public synchronized void onRecipesFiltered(ArrayList<Recipe> filteredRecipes)
{
FilteredRecipesListFragment filteredRecipesListFragment = (FilteredRecipesListFragment)
getSupportFragmentManager().findFragmentById(R.id.mm_filtered_recipes_list_fragment);
// filteredRecipesListFragment becomes null
filteredRecipesListFragment.onRecipesFiltered(filteredRecipes);
}
The Fragment
я получаю здесь является ListFragment
, который является частью файла XML, который надувается при запуске приложения. Похоже, что ListFragment
добавляется к FragmentManager
внутри родительский Fragment
во время инфляции. Вероятно, поэтому я получаю nullpointer при получении FragmentManager
Activity
. Таким образом, мой вопрос:
Как я могу получить ListFragment
в Activity
? Нужно ли хранить ссылку на родителя Fragment
, чтобы получить ListFragment
через его FragmentManager
? Родитель Fragment
раздувается при возврате new MyFragment()
в FragmentPagerAdapter#getItem()
, больше нигде, поэтому немного более сложно получить правильную ссылку в Activity
.
Есть еще одна вещь, которую следует отметить: я видел сообщения, в которых говорилось, что я должен обновить до JDK 1.7
, что я и сделал (OpenJDK 1.7
). Я не помню, что я сделал, но в разделе «Внешние библиотеки» я вижу <1.7> (/usr/lib/jvm/java-1.7.0-openjdk-amd64)
. Не уверен, если это имеет значение.
Это означает, что я должен сохранить ссылку на родителя 'Fragment' куда-нибудь быть в состоянии вызвать 'getChildFragmentManager()'. Метод в вопросе помещается в 'Activity', чтобы действовать как шлюз между' Activity' и его 'Fragments'.I * может * содержать ссылку на родительский «Фрагмент», но это часть «FragmentPagerAdapter», поэтому не так просто провести ссылку, потому что 'FragmentPagerAdapter # getItem()' возвращает 'new FilteredRecipesFragment()'. Каков наилучший способ сделать это? –
У меня нет идей ... позвольте мне подумать об этом –