猿问

通过 Fragment 传递数据

我的应用程序很简单,只是我有一个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); }

}


森林海
浏览 115回答 2
2回答

慕桂英4014372

试试这个: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");  }});注意编码规则:类名首字母大写,方法首字母小写...

慕慕森

更喜欢使用接口进行通信 Fragmentspublic 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() {    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答