FragmentActivity向Fragment中傳遞參數我想不用我說太多大家都知道,在此只做簡單的說明:
FragmentActivity傳遞參數給Fragment使用:
Bundle bundle = new Bundle();
Fragment.setArguments(bundle)
Fragment中獲取數據使用:
Bundle bundle = getArguments();
下面我重點說下FragmentActivity與Fragment間的相互通信
首先定義一個公共接口
/**
* FragmentActivity 與 Fragment交互接口
*/
public interface IMutualListener {
/**
* FragmentActivity用來改變Fragment中的展示內容
*/
void actMsg(String str);
/**
* Fragment用來改變FragmentActivity中的展示內容
*/
void fragmentMsg(String str);
}
FragmentActivity與Fragment分別去實現這個接口, 且Activity中需要重寫onAttachFragment方法、而Fragment中需要重寫onAttach方法事例如下:
/**
* FragmentActivity中調用接口的方式
*/
public class MainActivity extends FragmentActivity implements IMutualListener{
private IMutualListener iMutualListener;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv)
//改變fragment中的值
findViewById(R.id.btn).setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//FragmentActivity調用Fragment中方法前需要判斷該Fragment是否為null
iMutualListener.actMsg("我是來自FragmentActivity的信息");
}
});
}
@Override
public void onAttachFragment(Fragment fragment) {
try{
iMutualListener = (IMutualListener)fragment;
}catch (Exception e){}
super.onAttachFragment(fragment);
}
/**
* FragmentActivity用來改變Fragment中的展示內容
*/
@Override
public void actMsg(String str) {}
/**
* Fragment用來改變FragmentActivity中的展示內容
*/
@Override
public void fragmentMsg(String str) {
tv.setText(str);
}
}
/**
* Fragment中調用接口的方式
*/
public class FragmentA extends Fragment implements IMutualListener{
private IMutualListener iMutualListener;
private TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.fragment_a_page, null);
tv = (TextView) view.findViewById(R.id.tv)
//改變fragmentActivity中的值
view.findViewById(R.id.btn).setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
iMutualListener.fragmentMsg("我是來自Fragment的信息");
}
});
}
@Override
public void onAttach(Activity activity) {
try {
iMutualListener = (IMutualListener)activity;
}catch (Exception e){
throw new ClassCastException(activity.toString() + "must implement iMutualListener");
}
super.onAttach(activity);
}
/**
* FragmentActivity用來改變Fragment中的展示內容
*/
@Override
public void actMsg(String str) {
tv.setText(str);
}
/**
* Fragment用來改變FragmentActivity中的展示內容
*/
@Override
public void fragmentMsg(String str) {}
}
FragmentActivity與Fragment的交互主要部分就是onAttachFragment與onAttach方法的重寫,希望本篇文章能對你有所幫助!
201707071316.jpg