Java 两个片段之间的通信。我没有对任何片段使用任何已经定义的视图。我只是在运行时添加片段

Java 两个片段之间的通信。我没有对任何片段使用任何已经定义的视图。我只是在运行时添加片段,java,android,android-fragments,transactions,fragment,Java,Android,Android Fragments,Transactions,Fragment,我有两个片段MyFragment和MyFragment2,一个在MyFragment2中定义的接口 MyFragment2的代码: public class MyFragment2 extends android.support.v4.app.Fragment implements View.OnClickListener { public interface MyInterface2 { public void respond(String s); } EditText editTex

我有两个片段MyFragment和MyFragment2,一个在MyFragment2中定义的接口

MyFragment2的代码:

public class MyFragment2 extends android.support.v4.app.Fragment implements View.OnClickListener {
public interface MyInterface2
{
    public void respond(String s);
}
EditText editText;
Button sendData;
MyInterface2 comm;
View v=getView();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {


    v = inflater.inflate(R.layout.my_fragment_2,container,false);
    return v;
}



@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    this.comm = (MyInterface2)getActivity();
    editText = (EditText)getActivity().findViewById(R.id.text);
    sendData =(Button)getActivity().findViewById(R.id.sendData);
    sendData.setOnClickListener(this);
}


@Override
public void onClick(View v) {

    try {
        String s = editText.getText().toString();
        comm.respond(s);
    }
    catch(Exception e)
    {
        Toast.makeText(getActivity(),"error:"+e,Toast.LENGTH_LONG).show();
    }
  }
 }
我试图通过按下按钮()将editText的内容从MyFragment2发送到片段MyFragment

主要活动的代码如下*(my_layout是我放置片段的版面id)*:

public class MainActivity extends AppCompatActivity implements     MyFragment2.MyInterface2 {

    //String data;
   @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    MyFragment2 fragment2= new MyFragment2();
    FragmentManager fManager= getSupportFragmentManager();
    FragmentTransaction transaction= fManager.beginTransaction();
    transaction.add(R.id.my_layout,fragment2,"MyFragment2");
    transaction.commit();

}

public void respond(String s)
{

   MyFragment fragment = new MyFragment();
    FragmentManager fManager =getSupportFragmentManager();
    FragmentTransaction transaction = fManager.beginTransaction();
    transaction.replace(R.id.my_layout,fragment);

    transaction.commit();
    fragment.getData(s);
  }
}
当我单击片段MyFragment2中的sendData按钮时,MyFragment2将被片段Myfragment替换,但MyFragmnet的文本视图中没有发生数据更改,并且还显示了一个错误,我在片段MyFragment2()的try-catch块中捕获到了该错误。 MyFragment的代码:

public class MainActivity extends AppCompatActivity implements     MyFragment2.MyInterface2 {

    //String data;
   @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    MyFragment2 fragment2= new MyFragment2();
    FragmentManager fManager= getSupportFragmentManager();
    FragmentTransaction transaction= fManager.beginTransaction();
    transaction.add(R.id.my_layout,fragment2,"MyFragment2");
    transaction.commit();

}

public void respond(String s)
{

   MyFragment fragment = new MyFragment();
    FragmentManager fManager =getSupportFragmentManager();
    FragmentTransaction transaction = fManager.beginTransaction();
    transaction.replace(R.id.my_layout,fragment);

    transaction.commit();
    fragment.getData(s);
  }
}

您可以使用回调在片段之间轻松传递数据,也可以通过bundle传递参数。 查看本文:

您可以使用回调或通过包传递参数,轻松地在片段之间传递数据。 查看本文:
无需创建活动。取消对onCreateView块中的文本视图初始化语句的注释。
确保您在各自的布局文件中有文本视图,该视图具有您在活动中传递的相同id。无需创建。取消对onCreateView块中的文本视图初始化语句的注释。
确保在各自的布局文件中有文本视图,该视图的id与您通过的id相同

欢迎使用堆栈溢出!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。@Zebesta谢谢兄弟!(对于访问者->)为了从另一端检索数据,我做了以下操作:在onCreateView()方法中,我做了•Bundle b=getArguments();•字符串s=b.getString(“键”);•textView.setText;我完成了我的工作!!欢迎来到堆栈溢出!虽然这在理论上可以回答这个问题,但在这里包括答案的基本部分,并提供链接供参考。@Zebesta谢谢兄弟!(对于访问者->)为了从另一端检索数据,我做了以下操作:在onCreateView()方法中,我做了•Bundle b=getArguments();•字符串s=b.getString(“键”);•textView.setText;我完成了我的工作!!