通过接口给fragment传值_Fragment&&Fragment之间传值的2种方式

本文介绍了两种在Fragment之间传递数据的方法:一是通过定义接口,以Activity为桥梁进行数据交互;二是利用EventBus框架进行事件发布与订阅。详细展示了关键代码和步骤,包括接口定义、接口回调、EventBus的注册与解绑以及事件接收。
摘要由CSDN通过智能技术生成

github地址

一、使用接口,通过Activity宿主作为中间桥梁,进行数据交互

1)定义数据接口

2)在Activity中实现该接口,并实现接口中定义的方法

3)在Fragment A中声明接口对象,并调用接口中的方法

4)Activity中的接口回调中,向Fragment B传递数据

关键代码

接口:

public interface IAddListener {

void update(int count); //更新数据

}

AFragment:

public class AFragment extends Fragment {

private int count; //计数器,表示向Fragment B传递的数据

private IAddListener listener;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_a, container, false);

initView(view);

return view;

}

//初始化View

private void initView(View view) {

view.findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//数字加1,向Fragment B传递数据

count++;

listener.update(count); //传递数据

this.listener = listener;

}

}

Activity:

public class MainActivity extends AppCompatActivity implements IAddListener{

private FragmentManager fragmentManager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initFragment();

}

//初始化Fragment

private void initFragment() {

fragmentManager = getSupportFragmentManager();

AFragment aFragment = new AFragment();

FragmentTransaction transaction =

fragmentManager.beginTransaction();

transaction.add(R.id.fragment_a,aFragment,"AFragment");

transaction.add(R.id.fragment_b,new BFragment(),"BFragment");

transaction.commit();

aFragment.setIAddListener(this); //传递接口对象

}

//回调的接口

@Override

public void update(int count) {

BFragment bFragment = (BFragment) fragmentManager.findFragmentByTag("BFragment");

bFragment.update(count);

}

}

BFragment:

public class BFragment extends Fragment {

private TextView resultTv;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_b, container, false);

initView(view);

return view;

}

//初始化View

private void initView(View view) {

resultTv = (TextView) view.findViewById(R.id.result_tv);

}

//供Activity调用的方法

public void update(int count) {

resultTv.setText(String.valueOf(count));

}

}

二、EventBus传值

关键代码

AFragment:

EventBus.getDefault().post(Integer.valueOf(count));

BFragment:

@Overridepublic void onAttach(Context context) {

super.onAttach(context);

//注册

EventBus.getDefault().register(this);}

@Overridepublic void onDestroyView() {

super.onDestroyView(); //解绑

EventBus.getDefault().unregister(this);

}

//事件接收

@Subscribe

public void onEvent(Integer count){

resultTv.setText(String.valueOf(count));

Toast.makeText(getContext(), "传递数据成功", Toast.LENGTH_SHORT).show();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值