Я создал интерфейс, поэтому я могу установить текст на FragmentB, когда я нажимаю TextView на FragmentA. Что-то не работает, и я не могу понять это.Создайте интерфейс для связи с другим фрагментом
Я создал интерфейс под названием Communicator:
public interface Communicator {
void respond(String data);
}
На Fragmenta я поставил ссылку на интерфейс под названием Communcator и OnClickListener на TextView:
Communicator comm;
homeTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
comm.respond("Trying to set text on FragmentB from here");
}
});
FragmentB, set мой метод для изменения текста:
public void setText(final String data) {
startTripTxt.setText(data);
}
Наконец в MainActivity я реализовал интерфейс .. Я думаю, что здесь, где я делаю что-то неправильно:
@Override
public void respond(String data) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container_main, new FragmentB(), "fragment2").addToBackStack(null).commit();
FragmentB fragmentB= (FragmentB) getSupportFragmentManager().findFragmentByTag("fragment2");
if (fragmentB != null) {
fragmentB.setText(data);
}
}
Фрагмент 2 нагрузки, но текст пуст.
хорошо. Я думаю, что проблема заключается в функции ответа в MainActivity. Когда вы вызываете 'commit()', он не запускался в потоке пользовательского интерфейса, для его завершения требуется время, а затем фрагмент, объявленный после этого, будет null. – TruongHieu