Fragment的含義,作用,生命週期,使用方法,Fragment管理請查看上篇文章Fragment總結(一)。這篇文章主要是介紹Activity和Fragment之間通信,Fragment和Fragment之間通信。
Activity和Fragment之間通信
1.Activity和Fragment互相調用各自的方法實現交互:
(1)在Activity中調用Fragment的方法:
通過getActivity()獲取所附屬的Activity,可以調用其相關方法。
DynamicAddActivity activity = (DynamicAddActivity) getActivity();
activity.showToast();
(2)在Fragment中調用Activity的方法:
通過FragmentManager獲取相對應的Fragment,可以調用其相關方法。
if(oneFragment == null){
oneFragment = new OneFragment();
transaction.add(R.id.container, oneFragment);
} else {
transaction.show(oneFragment);
}
oneFragment.showToast(DynamicAddActivity.this);
2.通過回調接口實現通信:
在Fragment中聲明一些回調接口,當Fragment調用onAttach時,將這些回調接口實例化,Fragment可以調用各個activity的成員函數了,Activity必須implements這些接口,實現Activity和Fragment之間通信。
下面是一個非常簡單的例子,以此來進行說明:
Fragment中定義一個接口實例化,點擊按鈕時調用:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.one_fragment, null);
one_fragment_btn = (Button)view.findViewById(R.id.one_fragment_btn);
one_fragment_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {//點擊按鈕時調用回調方法
Boolean flag = listener.callback("test");//調用接口
if(flag){
Toast.makeText(getActivity(), "成功", Toast.LENGTH_LONG).show();
}
}
});
return view;
}
//回調接口
public interface CallBackListener{
boolean callback(String text);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
listener = (CallBackListener) context;//實例化接口
} catch (ClassCastException e){
}
}
Activity中實現接口:
//實現回調接口
@Override
public boolean callback(String text) {
if("test".equals(text)){
return true;
}
return false;
}
Fragment和Fragment之間通信
Fragment之間不能直接通信,需要通過Activity來實現Fragment之間通信,不再舉例進行說明。