首先来介绍的是我们的默认的布局

    

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:orientation="horizontal" >
  5.  
  6. <fragment
  7. android:id="@+id/fragment1"
  8. android:name="com.example.chuang.frgone"
  9. android:layout_width="0dp"
  10. android:layout_weight="1"
  11. android:layout_height="match_parent" />
  12.  
  13. <fragment
  14. android:id="@+id/fragment2"
  15. android:name="com.example.chuang.frgtwo"
  16. android:layout_weight="1"
  17. android:layout_width="0dp"
  18. android:layout_height="match_parent" />
  19.  
  20. </LinearLayout>

需要注意的属性也就fragment中的那个name属性,这个属性很关键,作用就是在这个布局被加载时,fragment自动实例化对应的类

既然要加载两个类文件,所以就必须加载对应的布局,

fragment_one   的布局文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <ListView
  8. android:id="@+id/ls_show"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content" >
  11. </ListView>
  12.  
  13. </LinearLayout>

fragment_two   的布局文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <TextView
  8. android:id="@+id/tv_show"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text="TextView" />
  12.  
  13. </LinearLayout>

然后我们需要做的就是将布局文件和类进行绑定

  1. package com.example.chuang;
  2.  
  3. import android.app.Fragment;
  4. import android.os.Bundle;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8.  
  9. public class frgtwo extends Fragment {
  10.  
  11. @Override
  12. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  13. Bundle savedInstanceState) {
  14. // TODO Auto-generated method stub
  15. return inflater.inflate(R.layout.fragment_two, container);
  16. }
  17. }

其他的绑定也是类似的,运行的效果如下图,在这里为你看清楚,我在Fragment_one中添加了背景颜色,

为了方便测试,我们定义了如下的字段

  1. package com.example.chuang;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import android.app.Fragment;
  6. import android.os.Bundle;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.ArrayAdapter;
  11. import android.widget.ListView;
  12.  
  13. public class frgone extends Fragment {
  14. private ListView ls=null;
  15. @Override
  16. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  17. Bundle savedInstanceState) {
  18. View v=inflater.inflate(R.layout.fragment_one, container);
  19. ls=(ListView)v.findViewById(R.id.ls_show);
  20. ls.setAdapter(new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,GetArray()));
  21. return v;
  22.  
  23. }
  24. private ArrayList<String> GetArray()
  25. {
  26. ArrayList<String> al=new ArrayList<String>();
  27. al.add("我就是我");
  28. al.add("点亮我的新");
  29. al.add("你的心,我的鑫");
  30. return al;
  31. }
  32. }

效果图如下

那现在我们要做的呢就是在左边点击,右边显示,也就是实现Fragment之间的传值

第一种方法,也就是利用回调

  1. package com.example.chuang;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import android.app.Activity;
  6. import android.app.Fragment;
  7. import android.os.Bundle;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.AdapterView;
  12. import android.widget.AdapterView.OnItemClickListener;
  13. import android.widget.ArrayAdapter;
  14. import android.widget.ListView;
  15.  
  16. public class frgone extends Fragment {
  17. private CallBack back=null;
  18. private ListView ls=null;
  19. @Override
  20. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  21. Bundle savedInstanceState) {
  22. View v=inflater.inflate(R.layout.fragment_one, container);
  23. ls=(ListView)v.findViewById(R.id.ls_show);
  24. ls.setAdapter(new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,GetArray()));
  25. ls.setOnItemClickListener(new OnItemClickListener() {
  26.  
  27. @Override
  28. public void onItemClick(AdapterView<?> parent, View view,
  29. int position, long id) {
  30. if(back!=null)
  31. {
  32. back.SetTeee(String.valueOf( parent.getItemAtPosition(position)));
  33. //back.SetTeee(getString(getId()));
  34. }
  35. }
  36.  
  37. });
  38. return v;
  39. }
  40. private ArrayList<String> GetArray()
  41. {
  42. ArrayList<String> al=new ArrayList<String>();
  43. al.add("我就是我");
  44. al.add("点亮我的新");
  45. al.add("你的心,我的鑫");
  46. return al;
  47. }
  48. public interface CallBack
  49. {
  50. void SetTeee(String s);
  51. }
  52. @Override
  53. public void onAttach(Activity activity) {
  54. super.onAttach(activity);
  55. if(activity instanceof CallBack)
  56. {
  57. back=(CallBack)activity;
  58. }
  59. }
  60. }

然后是主Activity的代码

  1. @Override
  2. public void SetTeee(String s) {
  3. View v= this.findViewById(R.id.fragment2);
  4. TextView t=(TextView)v.findViewById(R.id.tv_show);
  5. t.setText(s);
  6. }

效果图如下,这样我们就实现了第一种方法

 

第二种方法

使用第二种方法,我们首先需要来了解一下Fragment 和Activity的生命周期

  我们可以根据上面的那个图,可以知道,只有当fragment创建完毕,活动就会通知他们调用onActivityCreated()方法,来告知

  所以我们就可以在这里获取到主活动里面的一切,不是想干嘛就干嘛吗0-0!

贴上代码

  1. package com.example.chuang;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import android.app.Activity;
  6. import android.app.Fragment;
  7. import android.os.Bundle;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.ViewGroup;
  11. import android.widget.AdapterView;
  12. import android.widget.AdapterView.OnItemClickListener;
  13. import android.widget.ArrayAdapter;
  14. import android.widget.ListView;
  15. import android.widget.TextView;
  16.  
  17. public class frgone extends Fragment {
  18. private CallBack back=null;
  19. private ListView ls=null;
  20. private TextView tv=null;
  21. @Override
  22. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  23. Bundle savedInstanceState) {
  24. View v=inflater.inflate(R.layout.fragment_one, container);
  25. ls=(ListView)v.findViewById(R.id.ls_show);
  26. ls.setAdapter(new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,GetArray()));
  27. ls.setOnItemClickListener(new OnItemClickListener() {
  28.  
  29. @Override
  30. public void onItemClick(AdapterView<?> parent, View view,
  31. int position, long id) {
  32. if(back!=null)
  33. {
  34. if(tv!=null)
  35. tv.setText(String.valueOf( parent.getItemAtPosition(position)));
  36. }
  37. }
  38.  
  39. });
  40. return v;
  41. }
  42. @Override
  43. public void onActivityCreated(Bundle savedInstanceState) {
  44. super.onActivityCreated(savedInstanceState);
  45. View v= getActivity().findViewById(R.id.fragment2);
  46. tv=((TextView)v.findViewById(R.id.tv_show));
  47.  
  48. }
  49. private ArrayList<String> GetArray()
  50. {
  51. ArrayList<String> al=new ArrayList<String>();
  52. al.add("我就是我");
  53. al.add("点亮我的新");
  54. al.add("你的心,我的鑫");
  55. return al;
  56. }

第三种方法,那就是在Activity中来管理两个Fragment,当然做法也是非常的简单,只需要在Activity的start生命周期后就可以

Android Fragment之间传值的更多相关文章

  1. [转][译][Android基础]Android Fragment之间的通信

    2014-2-14 本篇文章翻译自Android官方的培训教程,我也是初学者,觉得官方的Training才是最好的学习材料,所以边学边翻译,有翻译不好的地方,请大家指正. 如果我们在开发过程中为了重用 ...

  2. Android Fragment之间的通信(用fragment替换掉XML布局文件中的一个线性布局)

    1.XML布局 (1)主界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...

  3. Android Fragment之间传递List数据

    要说的是在两个Fragment之间传递List数据,比如有个List<User>,以及传递字符串数据,比如testId,该如何从FragmentA传递到FragmentB呢? 下面这个例子 ...

  4. Android - fragment之间数据传递

    <Fragment跳转时传递参数及结果回传的方法> <Fragment详解之五——Fragment间参数传递> <Android解惑 - 为什么要用Fragment.se ...

  5. Android fragment之间消息传递

    1. 在Fragment里定义一个内部接口, 在Fragment初始化方法里, 把父Activity转换成这个接口, 赋值给成员变量 public class DummyFragment extend ...

  6. Fragment之间传值

    Activity: String myArguments;    public String getarguments() {   return myArguments;  } public void ...

  7. Android activity之间传值关键性代码

    从当前activity中获取et 表单中的值,并跳转到myactivity.java所绑定的xml布局文件上. private EditText et; Intent intent=new Inten ...

  8. android fragment传递参数_fragment之间传值的两种方法

    在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...

  9. Android——软键盘操作+fragment之间传递参数+TextView限制字数,显示"..."

    原文地址: Android 手动显示和隐藏软键盘 Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果) Android Fragment传递参数_Fragm ...

随机推荐

  1. "Money, Money, Money"

    acdream1408:http://115.28.76.232/problem?pid=1408 题意:给你一个x,让你构造a,b,是的na+bm可以组成大于x的所有的数.a>1,b>1 ...

  2. public void Delete(List EntityList) where T : class, new()类型参数约束

    查找后发现这是类型参数约束,.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型 where T : class T必须是一个类(class)类型 whe ...

  3. 一些简单的问题. 2的10次方与k (涉及到b k m的要用乘来解读)

    2的10次方是k k就表示2的10次方 2的16次方,解读为 2的6次方(64)*2的10次方(k)  简写为64k    64k=64*k 同理2的20次方  解读为2的10次方*2的10次方  k ...

  4. ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER004_同步显示歌词

    一.流程分析 1.点击播放按钮,会根据lrc名调用LrcProcessor的process()分析歌词文件,得到时间队列和歌词队列 2.new一个hander,把时间队列和歌词队列传给自定义的线程类U ...

  5. VC++下封装ADO类以及使用方法

    操作系统:windows 7软件环境:visual studio 2008 .Microsoft SQL 2005本次目的:介绍一个已经封装的ADO类,简单说明怎么导入使用 首先声明一下,这个封装的A ...

  6. 163. Missing Ranges

    题目: Given a sorted integer array where the range of elements are [lower, upper] inclusive, return it ...

  7. Ember.js demo1

    <!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-1 ...

  8. Android 内核初识(7)RefBase、LightRefBase、sp和wp

    简介 RefBase是Android中所有对象的始祖,类似MFC中的CObject及Java中的Object对象.在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对 ...

  9. tlplayer for ios V1.1(附上截图)

    此程序UI修改于虎跃在线课堂.所以极其相似. 可以播放网络视频与本地视频,不知道怎么拷贝本地视频到Ipad或iphone上看的朋友,请自己到网上看教程. 支持mms,file,rtsp,rtmp,ht ...

  10. Form – 保存自動關閉當前窗口

    FAQ: 在BUTTON的触发器中,写如下代码, commit_form; go_bloack('你想显示的那个window的block'); --或者写 show_view('你要显示的canvas ...