Пытаюсь получить и изменить xml элемент Активити, находясь внутри Фрагмента
Создаю переменную в фрагменте
public TextView writeable;
В методе OnActivityCreated (Тоже во фрагменте) получаю в эту переменную xml-элемент. В этом методе получается написать текст в TextView
@Override
public void onActivityCreated(Bundle savedInstanceState) {
writeable = getActivity().findViewById(R.id.towrite);
writeable.setText("wtf?");
super.onActivityCreated(savedInstanceState);
}
Обрабатываю OnClick.
На xml-кнопке написано android:onClick="onButtonClick". Этот метод находится в Активити. Выглядит так:
public void onButtonClick(View v) {
KvaActivity myFragment = new KvaActivity();
myFragment.onButtonClick(v);
}
Вызываем метод onButtonClick(), который находится во фрагменте. Тут я пытаюсь написать текст в TextView, полученный в OnActivityCreated
public void onButtonClick(View v) {
writeable.setText("1234567");
}
Подходит только такой способ, у меня куча кнопок, для каждой не хочется прописывать OnClickListener, поэтому сделал с помощью xml. А нажатие на кнопку в коде видно только в активити.
Ну что ж, приложение вылетает после клика, смотрю логи:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
Т.е. в OnClick переменная считается незаполненной. Как так, если в OnActivityCreated все прекрасно? И самое главное - как это исправить?
UPD Дополнил вопрос, почитав комментарии
KvaActivity myFragment = new KvaActivity();
myFragment.onButtonClick(v);
Ошибка NPE возникает из-за того, что в onClick вы создаете новый объект фрагмента и вызываете метод у него.
Т.к. данный фрагмент был только создан, но не был добавлен с помощью FragmentTransaction, то и события жизненного цикла не вызываются.
P.S.
onViewCreated во фрагментеСкорее всего, getActivity() возвращает null. Если так, то создайте переменную View view, в методе фрагмента onCreateView пишите
view = inflater.inflate(R.layout.название_layout-файла_фрагмента, null);,
далее вместо
writeable = getActivity().findViewById(R.id.towrite);
пишите
writeable = view.findViewById(R.id.towrite);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости