Android中Fragment与Activity的相互通信

Fragment向Activity通信:

    实现Fragment向Activity通信的方法为在Fragment内部定义接口,在接口中定义要实现的方法,并在绑定的Activity中实现这个接口,在Fragment 的OnAttach方法中获得绑定的Activity对象,并将得到的Activity对象强制转化为接口对象,这样就可以在fragment中操作activity实现接口之后继承的方法,从而从Fragment向Activity传递数据,进行通信。

Fragment具体函数:

public class Fragment1 extends Fragment  {

    private Button btn_send, btn_sure;
    private EditText editText;
    private String data, numbers;
    private EditText editText1;
    private SharedPreferences preferences;
    private SharedPreferences.Editor editor;

    public interface FragmentListener {
        void showDataName(String data);
    }

    private FragmentListener listener;

    @Override
    public void onAttach(Activity activity) {
        listener = (FragmentListener) activity;
        super.onAttach(activity);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.view1, container, false);


        editText = (EditText) view.findViewById(R.id.editText1);
        btn_send = (Button) view.findViewById(R.id.button_send);
        editText1 = (EditText) view.findViewById(R.id.editText2);
        btn_sure = (Button) view.findViewById(R.id.btn_sure);


        setdata();
        return view;
    }

    private void setdata() {
        btn_sure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                numbers = editText1.getText().toString();
                if (!numbers.equals("")) {

                    if (!numbers.equals("")) {
                        listener.showDataName(numbers);
                        Log.e(TAG, "finish_listen");
                    } else {
                        editText.setError("内容不能为空");
                    }
                    Log.e("TAG", "onClick: " + numbers);
                }
            }
        });
        btn_send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                data = editText.getText().toString();
                if (!data.equals("")) {
                    listener.showDataName(data);
                } else {
                    editText.setError("内容不能为空");
                }
            }
        });
    }

}
Acitivity函数

public class DeviceControlActivity extends FragmentActivity implements View.OnClickListener, Fragment1.FragmentListener {
@Override
public void showDataName(String data) {
    if (data != null) {
        Log.e(TAG, "number" + data);
        if (data.length() > 3) {
            editor.putString("Web", data);

        }
        editor.putString("number", data);
        editor.commit();
        if (myListener != null) {
            if (data.equals("4")) {

                myListener.chosePressureNumber(4);
            } else if (data.equals("5")) {
                myListener.chosePressureNumber(5);
            } else if (data.equals("6")) {

                myListener.chosePressureNumber(6);
            } else if (data.equals("7")) {
                myListener.chosePressureNumber(7);
            } else if (data.equals("8")) {
                myListener.chosePressureNumber(8);
            } else if (data.equals("9")) {
                myListener.chosePressureNumber(9);
            } else if (data.equals("10")) {
                myListener.chosePressureNumber(10);
            }
        }
    }
}
这样Activity就可以得到从Fragment传过来的数据。

同理,既然这个方法可以实现Fragment向Activity通信,那么为什么不能实现Activity向Fragment通信呢?答案是可定的,当然是能。我们在Activity中定义一个接口,在接口中定义要实现的方法,令Fragment来实现这个接口,实现其中的方法,重写Activity中的OnAttachFragment方法中得到绑定的Fragment对象,并强制转化为接口对象,得到这个接口对象就可以操作Fragment中实现的方法,流程和上面大体一样,就不往上贴了.这样就可以实现Fragment与Activity的实时通信。

       Fragment与Fragment通信

        Fragment之间的通信可以借助于共同的Activity来完成,也可以通过观察者模式来完成,我觉得代码呢大多时候还是要靠自己来钻研,这个模式就大家自己来探索吧。

谢谢~来自一个刚入android的小白




啊啊啊

你可能感兴趣的:(Android中Fragment与Activity的相互通信)