一、消息Fragment-->Activity
1、Fragment啓動Activity時通過Intent將數據傳遞過去,這種方法每次都要重啓Activity。
2、通過回調方法:
2.1 普通的回調方法。
private void switch(Fragment f) {
if(f != null){
if(getActivity() instanceof MainActivity){
((MainActivity)getActivity()).switchFragment(f);
}
}
}
該方法MainActivity 的實例,實現調用MainActivity 中的方法實現通信。2.2 通過接口實現回調:
2.2.1 在Fragment類中定義接口及抽象方法,並在onAttach方法中添加如下代碼:
private OnFragmentChangeListener mCallBack;
public interface OnFragmentChangeListener {
public void onTabSwitch(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//確保包含Fragment的Activity已經實現了回調接口,否則拋出異常
try {
mCallBack = (OnFragmentChangeListener) activity;
} catch (Exception e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentChangeListener");
}
}
2.2.2 在Activity中實現上面的接口:
public class TestActivity extends Activity implements
MyFragment.OnFragmentChangeListener {
@Override
public void onTabSwitch(int position) {
//此處接收事件的回調
}
}
2.2.3 在Fragment將信息發送給父Activity:
mCallBack.onTabSwitch(pos);
二、消息從Activity-->Fragment
1、通過實例化一個Fragment
Fragment2 newFragment = new Fragment2();
Bundle args = new Bundle();
args.putInt(Fragment2.ARG_KEY, position);
newFragment.setArguments(args);
getFragmentManager().beginTransaction().replace(R.id.frame, newFragment).commit();
或者通過構造方法將數據傳遞給Fragment(官方不推薦):
Fragment2 newFragment = new Fragment2(arg1,arg2);
1.1在Fragment中
public static MyFragment newInstance(String userName, String password) {
MyFragment frgmt = new MyFragment();
Bundle args = new Bundle();
args.putString("userName", userName);
args.putString("password", password);
frgmt.setArguments(args);
return frgmt;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (null != getArguments()) {
String userName = getArguments().getString("userName");
String password = getArguments().getString("password");
}
}
1.2Activity中調用:
MyFragment myFragment = MyFragment.newInstance("myName", "myPsw");
2、通過findFragmentById()或者findFragmentByTag()方法找到Fragment的實例:
MyFragment fragment = (MyFragment) getFragmentManager().findFragmentById(R.id.frame);
if(fragment!=null){
fragment.frgmtFunc();
}
參考自:http://blog.csdn.net/xyz_lmn/article/details/8631195#t1