我创建了一个界面,所以当我在FragmentA上按下TextView时,我可以在FragmentB上设置文本。有些东西不起作用,我无法弄清楚这一点。
我创建了一个名为Communicator的接口:
public interface Communicator {
void respond(String data);
}
在FragmentA上,我在TextView上设置了一个名为Communcator的接口和一个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加载,但文本为空。
答案 0 :(得分:2)
片段2加载,但文本为空。
您实现Communicator
没问题,但是您调用FragmentB
并传递数据的方式还不行。这就是为什么你不能从FragmentB
获取文本的原因。将数据发送到FragmentB
的正确方法应该是这样的:
public static FragmentB createInstance(String data) {
FragmentB fragment = new FragmentB();
Bundle bundle = new Bundle();
bundle.putString("data", data);
fragment.setArguments(bundle);
return fragment;
}
您可以通过以下方式从FragmentB获取数据:
Bundle bundle = getArguments();
if (bundle != null) {
String data = bundle.getString("data");
}
答案 1 :(得分:1)
看起来在宣告fragmentB之后,您就意味着在该片段上设置文本。您正在调用trainFinderFragment.setText()。这是你的问题吗?
FragmentB fragmentB= (FragmentB) getSupportFragmentManager().findFragmentByTag("fragment2");
if (fragmentB != null) {
fragmentB.setText(data);
}