欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Activity与Fragment之间的相互传值

程序员文章站 2022-05-14 10:03:34
...

一: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方法中传输数据为
Activity与Fragment之间的相互传值

二: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;
}

便完成了对象的传递。

相关标签: Fragment