Android系列之Fragment和Activity之间的数据通讯
【摘要】 Fragment是Android3.0之后才推出来的。可以用来做底部菜单,现在很多APP都有用到这个底部菜单。当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫。
Fragment和Activity之间是可以相互进行参数传送这些。但是Fragment不可以直接就将数据传送到另外一个Fragment,而...
Fragment是Android3.0之后才推出来的。可以用来做底部菜单,现在很多APP都有用到这个底部菜单。当然TabHost也可以用来做底部菜单,但是Fragment来做,动画效果这些可以做得更炫。
Fragment和Activity之间是可以相互进行参数传送这些。但是Fragment不可以直接就将数据传送到另外一个Fragment,而是借助Activity,先传到Activity,如何再通过Activity传到Fragment。 所以实现Fragment和Activity之间的数据传送是很关键的。
(1)先创建一个Interface接口IBnCallListener,用来实现两者之间的数据传送。
-
package com.util;
-
/**
-
* 传送Fragment和FragmentActivity之间的控件交互信息
-
*
-
*/
-
public interface IBtnCallListener {
-
public void transfermsg();
-
}
(2)创建Activity类实现IbtnCallListener接口,重载onAttachFragment(Fragment fragment)方法和transfermsg()方法,然后transfermsg()方法就根据自己项目需要去调用了
-
package com.activity;
-
-
-
/**
-
*
-
*主界面类
-
*fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包,
-
*而fragmentActivity就是这个兼容包里面的,它提供了操作fragment的一些方法,其功能跟3.0及以后的版本的Activity的功能一样。
-
*/
-
public class MainActivity extends FragmentActivity implements IBtnCallListener{
-
//RadioButton
-
-
private RadioButton radioBtn;
-
-
private Intent intent;
-
private Bundle bundle;
-
-
-
private IBtnCallListener mBtnCallListener;
-
-
private Bundle sendBundle;
-
-
private MyFragment mFragment;
-
-
-
FragmentTransaction ft;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
//设置无标题
-
requestWindowFeature(Window.FEATURE_NO_TITLE);
-
setContentView(R.layout.main);
-
-
}
-
-
...
-
-
-
-
@Override
-
public void onAttachFragment(Fragment fragment) {
-
try {
-
mBtnCallListener=(IBtnCallListener) fragment;
-
} catch (Exception e) {
-
-
}
-
super.onAttachFragment(fragment);
-
}
-
-
-
@Override
-
public void transfermsg() {
-
radioBtn.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.tab_found_pressed_icon, 0, 0);
-
radioBtn.setTextColor(mFound.getResources().getColor(R.color.topbar_bg));
-
if(mFoundFragment == null){
-
//关键代码,肯定要这三句代码的,其它的根据自己的项目需要
-
mFragment = new MyFragment();
-
sendBundle = new Bundle();
-
sendBundle.putString("test", "Android");
-
//transfermsg();
-
mFragment.setArguments(sendBundle);
-
ft.add(R.id.fg_content,mFragment);
-
}
-
ft.show(mFoundFragment);
-
ft.commit();
-
}
-
}
(3)Fragment类实现IBtnCallListener接口类
-
/**
-
* MyFragMent类
-
*/
-
-
public class MyFragment extends Fragment implements IBtnCallListener{
-
-
private Bundle bundle;
-
-
IBtnCallListener mbtnListener;
-
-
private String test;
-
-
//@Nullable
-
@Override
-
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-
view = inflater.inflate(R.layout.found,container,false);
-
transfermsg();
-
return view;
-
}
-
-
-
-
}
-
-
@Override
-
public void onActivityCreated(Bundle savedInstanceState) {
-
super.onActivityCreated(savedInstanceState);
-
}
-
-
@Override
-
public void onAttach(Activity activity) {
-
try {
-
mbtnListener=(IBtnCallListener) activity;
-
} catch (Exception e) {
-
// TODO: handle exception
-
throw new ClassCastException(activity.toString() + "must implement mbtnListener");
-
}
-
super.onAttach(activity);
-
}
-
-
@Override
-
public void transfermsg() {
-
bundle = getArguments();
-
test = bundle.getString("test");
-
System.out.println("由Activity传输过来的信息");
-
Toast.makeText(getActivity(), test, 1000).show();
-
}
-
}
文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。
原文链接:smilenicky.blog.csdn.net/article/details/49942797
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)