创建一个与另一个片段

时间:2017-02-13 02:45:15

标签: android android-fragments interface

我创建了一个界面,所以当我在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加载,但文本为空。

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);
}