acvitity向Fragment传值跳转问题

来源:互联网 发布:女生舍不得买衣服知乎 编辑:程序博客网 时间:2024/06/02 04:40
整理Fragment与Activity之间的数据交换,大体上包括三种:1、Fragment从Activity获取数据2、Activity从Fragment获取数据3、Fragment之间获取数据    通常,如果Activity向不同的Activity传递数据,最常用的是通过Intent.putExtra()方法,将简单类型的数据或可序列化的数据保存在Intent对象中,然后在目标Activity中使用getXxx(getInt,getString等)方法获得这些数据。 从Activity向Fragment中传递数据可以Fragment.getArguments方法向Fragment传递参数值,并且通过Fragment.getArguments方法获取传递的参数值。     从Fragment向Actvity中传递数据采用接口回调的方式实现数据的传递。 Fragment从Activity获取数据的三种方法:要实现的功能:用Fragment显示从其所在的Acitivity1中获取到的数据。法一:直接在Fragment中getActivity.getIntent()...这样就能拿到Activity1的参数。getActivity()指向的就是Activity1,当然可以直接getIntent()。                       Intent intent = new Intent(getActivity(),MyOrder.class);                 String result = getActivity().getIntent().getStringExtra("result");                  intent.putExtra("result", result);                  startActivity(intent);        这样直接在Fragment的onCreate中,拿到宿主Activty,宿主Activity中肯定能通过getIntent拿到Intent,然后通过get方法,随意拿参数~~这么写,功能上是实现了,但是存在一个大问题:我们用Fragment的一个很大的原因,就是为了复用。这么写相当于这个Fragment已经完全和当前这个宿主Activity绑定了,复用直接废了~~~所以呢?我们换种方式,推荐使用arguments来创建Fragment。public class ContentFragment extends Fragment  {        private String mArgument;      public static final String ARGUMENT = "argument";        @Override      public void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          // mArgument = getActivity().getIntent().getStringExtra(ARGUMENT);          Bundle bundle = getArguments();          if (bundle != null)              mArgument = bundle.getString(ARGUMENT);        }      /**      * 传入需要的参数,设置给arguments     * @param argument     * @return     */      public static ContentFragment newInstance(String argument)      {          Bundle bundle = new Bundle();          bundle.putString(ARGUMENT, argument);          ContentFragment contentFragment = new ContentFragment();          contentFragment.setArguments(bundle);         return contentFragment;      } 给Fragment添加newInstance方法,将需要的参数传入,设置到bundle中,然后setArguments(bundle),最后在onCreate中进行获取;这样就完成了Fragment和Activity间的解耦。当然了这里需要注意:setArguments方法必须在fragment创建以后,添加给Activity前完成。千万不要,首先调用了add,然后设置arguments。 法二:给Fragment定义一个方法,比如setValue(Object xxx),在Activity中直接用fragment.setValue(obj)来传值。    例:首先在activity里拿到这个fragment,然后调用fragment的方法,在方法里进行界面更新操作。  Activity中:menua=(MenuFragment)getSupportFragmentManager().findFragmentById(R.id.menu_fragment);menua.updataUI(joinclub.getName());  Fragment中:public void updataUI(String clubname){clubName.setText(clubname); }法三:接口回调方式。(1)在Fragment中定义一个接口public interface onTestListener {  public void onTest(String str);  }(2)在Activity中实现这个接口,并实现接口中的方法@Override  public void onTest(String str) {  text.setText(str);//可随意  }(3)在Fragment中实现OnAttach方法@Override  public void onAttach(Activity activity) { super.onAttach(activity); try {  mCallback = (onTestListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() +" must implement OnHeadlineSelectedListener"); } }(4)声明接口变量,就可以调用接口中的方法mCallback.onTest(edit.getText().toString());实现效果:从Activity传递数据到两个Fragment中,Fragment获取数据后,展示出来。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 捷豹钥匙没电了怎么办 车钥匙没电 汽车报警怎么办 东西卡在门锁里怎么办 锁芯里面有东西怎么办 有东西卡在锁里怎么办 锁里面卡了牙签怎么办 塑料卡在锁里怎么办 门锁被牙签堵了怎么办 锁子里面卡东西怎么办 东西卡在锁里怎么办 开车门碰到旁边车门怎么办 美团退款后 物品怎么办 倒车影像是反的怎么办 荒野行动cp版玩着玩着关机怎么办 王者荣耀点击开始游戏就闪退怎么办 电脑遥控游玩ps4画面抖动怎么办 ps4特典不能用了怎么办 苹果x出现的分屏怎么办 电脑注册表文件丢失或损坏怎么办 cad绘图反应很慢怎么办 拍到货商家下架怎么办 电动车头太活了怎么办 快捷方式在根目录找不到了怎么办 神秘海域4卡bug了怎么办 地下城老是闪退怎么办 强制关机后电脑打不开了怎么办 文明5地中海的海军怎么办 文明5被贸易禁运怎么办 文明5海里的食物怎么办 文明5遗址没了怎么办 ⅰpad屏幕动不了怎么办 苹果6plus满了怎么办 cf的fps低怎么办win7 游戏倒闭冲的钱怎么办 一闭眼就做噩梦怎么办 吃鸡游戏上瘾了怎么办 使命召唤7很卡怎么办 w10升级系统卡死怎么办 答题卡写错位置怎么办 高考答错区域该怎么办 荒野行动画面中间有条横怎么办