【发布时间】:2017-02-13 02:45:14
【问题描述】:
我创建了一个界面,因此当我在 FragmentA 上按下 TextView 时,我可以在 FragmentB 上设置文本。有些东西不起作用,我无法弄清楚。
我创建了一个名为 Communicator 的界面:
public interface Communicator {
void respond(String data);
}
在 FragmentA 上,我在名为 Communcator 的接口上设置了一个引用,并在 TextView 上设置了一个 OnClickListener:
Communicator comm;
homeTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
comm.respond("Trying to set text on FragmentB from here");
}
});
FragmentB,设置我改变文本的方法:
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()时,它没有在UI线程中运行,需要时间来完成它,然后你声明的fragmentB将为null。
标签: android android-fragments interface