Activity与Fragment之间的数据交互方式

Activity向Fragment传递数据

第一种方式:
1.1 可在需要传递的Fragment中定义一个getInstance(传递的数据参数)方法来传递数据,同时可在onCreateView方法中获取传递过来的值。

static MyFragment getInstance(String str) {
    MyFragment mFragment = new MyFragment();
    Bundle bundle = new Bundle();
    bundle.putString("data", str);
    mFragment.setArguments(bundle);
    return mFragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.layout_fragment, container, false);
    if (isAdded()) {// 判断Fragment已经依附Activity
        Bundle bundle = getArguments();
        data = bundle.getString("data");
    }
    tvFm = (TextView) view.findViewById(R.id.tvFm);
    if (data != null) {
        tvFm.setText(data);
    }
    return view;
}

1.2 在宿主Activity中创建Fragment

FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment fragment = MyFragment.getInstance("key");

第二种方式:
2.1 在宿主Activity中定义传值的方法

public String getTitle() {
    return "xxx";
}

2.2 在Fragment中的onAttach方法中获取到这个值

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    // 通过强转成宿主Activity就可以获取到传递过来的数据
    title = ((MainActivity) activity).getTitle();
}

Fragment向Activity传递数据

1 在Fragment中定义一个回调接口
2 在Activity中实现这个回调接口
3 在FragmentonAttach方法中获得Activity中实现好的实例化接口对象
4 利用接口的对象进行传值
Fragment示例代码:

public class MyFragment extends Fragment {

    private Button btnValue;
    // 定义用来与外部Activity交互,获取到宿主Activity
    private CallBackValue callBackValue;

    // 定义了Activity必须实现的接口方法
    public interface CallBackValue {
        void SendMessageValue(String value);
    }

    // 当Fragment被加载到Activity的时候会被回调
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (activity instanceof CallBackValue) {
            callBackValue = (CallBackValue) getActivity(); // 获取到宿主Activity并赋值
        } else {
            throw new IllegalArgumentException("activity must implements CallBackValue");
        }        
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment, container, false);
        btnValue = (Button) view.findViewById(R.id.btnValue);
        btnValue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                callBackValue.SendMessageValue("xxx");
            }
        });
        return view;
    }

    // 将传递进来的Activity对象释放掉
    @Override
    public void onDetach() {
        super.onDetach();
        callBackValue = null;
    }
}

Activity示例代码:

public class MyFragment extends Activity implements CallBackValue {

    private TextView tvValue;
    private CallBackValue callBackValue;

    @Override
    public void SendMessageValue(String value) {
        tvValue.setText(value);
    }

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

        tvValue = (TextView) findViewById(R.id.tvValue);

        FragmentTransaction ft = getFragmentManager().beginTransaction();
        Fragment fragment = MyFragment.getInstance("key");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值