(转)activity和fragment交互

双鱼座1990 发布于 2015/12/13 10:22
阅读 610
收藏 6

一,使用handler

这里我不再详细介绍那写比较常规的方式,例如静态变量,静态方法,持久化,application全局变量,收发广播等等。

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

我写了一个Demo与大家分享,链接地址:http://download.csdn.net/detail/huangyabin001/7559807

点击下载demo

二,使用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"));


针对本文也写了一个Demo,下载地址:http://download.csdn.net/detail/huangyabin001/7560031

点击打开链接

三,使用接口

第一步:我们需要在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());
}


完整代码链接地址:http://download.csdn.net/detail/huangyabin001/7560291点击打开链接

加载中
返回顶部
顶部