Activity与Fragment之间的相互传值

一:Activity向Fragment传值
用setArguments的方式
在Fragment的java文件中创建数据接受的代码

public static final String BUNDLE_TITLE = "bundle_title";
private String mTitle = "imooc";

创建一个新的静态方法

    public static ListFragment newInstance(String title){
    ListFragment fragment = new ListFragment();
    Bundle bundle = new Bundle();
    bundle.putString(BUNDLE_TITLE, title);
    fragment.setArguments(bundle);
    return fragment;
}

在oncrete方法中进行接收

 if(getArguments() != null){
        mTitle = getArguments().getString(BUNDLE_TITLE);

便可在oncreateView中更改代码为

 textView.setText(mTitle);

最后在Activity中oncreate方法中传输数据为
在这里插入图片描述

二:Fragment向Activity中传值
没有好的方法,只能进行回调
1.在Fragment中创建回调接口

// 设置接口的方法
public void setOnTitleClickListener(OnTitleClickListener onTitleClickListener) {
    mOnTitleClickListener = onTitleClickListener;
}

// 定义变量
private OnTitleClickListener mOnTitleClickListener;

// 定义接口
public interface OnTitleClickListener{
    void onClick(String title);
}

2.在oncraeteView中创建一个点击回调的方法

   textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mOnTitleClickListener != null){
                mOnTitleClickListener.onClick(mTitle);
            }
        }
    });

3,在Activity中继承接口

public class MainActivity extends AppCompatActivity  implements ListFragment.OnTitleClickListener{

4.修改此处的代码

    ListFragment listFragment = ListFragment.newInstance("list");
    getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.listContainer, listFragment)
            .commit();
    listFragment.setOnTitleClickListener(this);
  1. 加入

     public void onClick(String title) {
     setTitle(title);
     }
    

补充:如果要传递一个对象时应该
在Fragment中

private User mUser;

public void setUser(User user) {
    mUser = user;
}

public class User {

}
 public static ListFragment newInstance(String title, User user){
 ListFragment fragment = new ListFragment();
 Bundle bundle = new Bundle();
 bundle.putString(BUNDLE_TITLE, title);
 fragment.setArguments(bundle);
 fragment.setUser(user);
 return fragment;
}

便完成了对象的传递。

猜你喜欢

转载自blog.csdn.net/Derrick_itRose/article/details/107529176