github地址
一咬腕、使用接口件甥,通過Activity宿主作為中間橋梁合砂,進(jìn)行數(shù)據(jù)交互
1)定義數(shù)據(jù)接口
2)在Activity中實(shí)現(xiàn)該接口愚争,并實(shí)現(xiàn)接口中定義的方法
3)在Fragment A中聲明接口對(duì)象,并調(diào)用接口中的方法
4)Activity中的接口回調(diào)中毒返,向Fragment B傳遞數(shù)據(jù)
關(guān)鍵代碼
接口:
public interface IAddListener {
void update(int count); //更新數(shù)據(jù)
}
AFragment:
public class AFragment extends Fragment {
private int count; //計(jì)數(shù)器渊跋,表示向Fragment B傳遞的數(shù)據(jù)
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) {
//數(shù)字加1腊嗡,向Fragment B傳遞數(shù)據(jù)
count++;
listener.update(count); //傳遞數(shù)據(jù)
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); //傳遞接口對(duì)象
}
//回調(diào)的接口
@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調(diào)用的方法
public void update(int count) {
resultTv.setText(String.valueOf(count));
}
}
二、EventBus傳值
關(guān)鍵代碼
AFragment:
EventBus.getDefault().post(Integer.valueOf(count));
BFragment:
@Overridepublic void onAttach(Context context) {
super.onAttach(context);
//注冊(cè)
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(), "傳遞數(shù)據(jù)成功", Toast.LENGTH_SHORT).show();
}