第一種
首先我們來介紹使用Handler來實現Fragment與Activity 的交互。
第一步,我們需要在Activity中定義一個方法用來設置Handler對象。
public void setHandler(Handler handler) {
mHandler = handler;
}
第二步,在Fragment中的回調函數onAttach()中得到Fragment所在Activity,並調用setHandler方法,設置Handler。該Handler在Fragment中定義,用來接收消息與Fragment進行交互。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = (MainActivity) activity;
mActivity.setHandler(mHandler);
}
public Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
text.setText((String) msg.obj);
break;
}
};
};
然後我們可以在Activity中發送消息給Fragment中的Hanlder進行交互。
public void inter(View view) {
Message msg = new Message();
msg.obj = edit.getText().toString();
msg.what = 1;
mHandler.sendMessage(msg);
}
第二種
首先我們需要在Activity中動態添加Fragment時,用Bundle封裝我們需要傳遞的數據。
public void button(View view) {
ArgFragment argFragment = new ArgFragment();
Bundle bundle = new Bundle();
bundle.putString("arg", edit.getText().toString());
argFragment.setArguments(bundle);
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.layout_fragment, argFragment);
ft.commit();
}
然後在Fragment的回調函數中通過Fragment提供的方法getArguments() 取出Bundle對象。
Bundle bundle = getArguments();
第三種
第一步:我們需要在Fragment中定一個接口,並確保我們的容器Activity實現了此接口:
public interface onTestListener {
void onTest(String str);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// 這個方法是用來確認當前的Activity容器是否已經繼承了該接口,如果沒有將拋出異常
try {
mCallback = (onTestListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener");
}
}
第二步:在我們的容器Activity中實現此接口,並實現接口中的方法。
public class MainActivity extends Activity implements onTestListener {
@Override
public void onTest(String str) {
text.setText(str);
}
第三步:我們在fragment執行某些特定的操作時,調用接口中聲明的方法。
@Override
public void onClick(View v) {
mCallback.onTest(edit.getText().toString());
}