您的位置:首页 > 移动开发 > Android开发

Android Fragment与activity交互方式

2016-01-07 11:16 429 查看
一共总结了三种方式:

一、handler:

首先我们来介绍使用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);
}


二、bundle:

首先我们需要在Activity中动态添加Fragment时,用Bundle封装我们需要传递的数据。
public void button(View view) {
ArgFragment arg = new ArgFragment();
Bundle bundle = new Bundle();
bundle.putString("arg", edit.getText().toString());
arg.setArguments(bundle);
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.layout_fragment, arg);
ft.commit();
}
然后在Fragment的回调函数中通过Fragment提供的方法getArguments()取出Bundle对象。
text = (TextView) view.findViewById(R.id.text);
Bundle bundle = getArguments();
text.setText(bundle.getString("arg"));


三、接口:

第一步:我们需要在Fragment中定一个接口,并确保我们的容器Activity实现了此接口:
public interface onTestListener {
public 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());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: