为了账号安全,请及时绑定邮箱和手机立即绑定

通过 Fragment 传递数据

通过 Fragment 传递数据

森林海 2021-06-21 21:01:20
我的应用程序很简单,只是我有一个FragmentA和FragmentB第一个有一个按钮通过第二个片段传递字符串数据(“嗨,我是 A”),第二个片段有一个文本来显示此消息我的问题是为什么我的“ModifyTxt”方法不起作用?public class newFragmentA extends Fragment{    Button button;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {        return inflater.inflate(R.layout.newfragmenta_layout,container,false);    }    newFragmentB newfragmentB;    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        button = getActivity().findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                newfragmentB.ModifyTxT("Hi I'm A");            }        });       }}这是我的第二个 Fragment(FragmentB)public class newFragmentB extends Fragment {    TextView textView;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {        return inflater.inflate(R.layout.newfragmentb_layout,container,false);    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        textView = getActivity().findViewById(R.id.TV);    }    public void ModifyTxT(String string){        textView.setText(string); }}
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

试试这个:


public class FragmentB extends Fragment {

  // ...


  public static FragmentB newInstance() {

        return new FragmentB();

    }

}

在片段A中:


button.setOnClickListener(new View.OnClickListener() {

  @Override

  public void onClick(View v) {

    FragmentB newFragment = FragmentB.newInstance();

    newFragment.modifyTxT("Hi I'm A");

  }

});

注意编码规则:类名首字母大写,方法首字母小写...


查看完整回答
反对 回复 2021-06-23
?
慕慕森

TA贡献1856条经验 获得超17个赞

更喜欢使用接口进行通信 Fragments


public class FragmentA extends Fragment{

    public interface MyCallback{

        void modifyTxT(String text); // method naming convention start with small letter.

    }


    @Override

    public void onActivityCreated(@Nullable Bundle savedInstanceState) {

        super.onActivityCreated(savedInstanceState);

        button = getActivity().findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                if (newfragmentB instanceof MyCallback) {

                    ((MyCallback)newfragmentB).modifyTxT("Hi I'm A");

                }

            }

        });



    }


}


public  class FragmentB extends Fragment implements FragmentA.MyCallback{


    public static FragmentB getInstance(){

        return new FragmentB();


    }


    @Override

    public void modifyTxT() {


    }

}


查看完整回答
反对 回复 2021-06-23
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信