1 //1,fragment静态加载:MainActivity    MainActivty1_2  Myfragment1
 2 //2,fragment动态加载  :MainActivity   Myfragment2
 3 //3,fragment生命周期:  Myfragment4_life
 4 //4,fragment和:Activity之间通信:::MainActivity4 Myfragment5
 5 public class MainActivity extends Activity implements OnCheckedChangeListener {
 6     private RadioGroup group;
 7
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.main);
12         group = (RadioGroup) findViewById(R.id.radioGroup1);
13         group.setOnCheckedChangeListener(this);
14
15     }
16
17     @Override
18     public void onCheckedChanged(RadioGroup group, int checkedId) {
19         // TODO Auto-generated method stub
20         switch (checkedId) {
21         case R.id.radio0: {
22             //静态加载fragment:
23             //第一个Activity跳转Activity1_2(xml布局中是含有android:name="com.example.fragment.Myfragment1"的fragment标签)
24             //Myfragment1类继承fragment
25             //Myfragment1类中的xml布局含有TextView和Button
26             Intent intent = new Intent(MainActivity.this, MainActivty1_2.class);
27             startActivity(intent);
28             break;
29         }
30              //动态加载fragment:
31         case R.id.radio1: {
32             //创建Myfragment2类继承fragment
33             //Myfragment2类中的xml布局含有TextView和Button
34             //把fragment2添加到main中的xml中的 LinearLayout布局(id=R.id.frame)
35             Myfragment2 fragment2 = new Myfragment2();
36             FragmentManager fragmentManager = getFragmentManager();
37             FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
38             beginTransaction.add(R.id.frame, fragment2);//把fragment2添加到拿个布局
39             beginTransaction.addToBackStack(null);//设置物理连接返回键
40             beginTransaction.commit();
41
42             break;
43         }
44         case R.id.radio2: {
45
46             break;
47         }
48
49         case R.id.radio3: {
50             Intent intent = new Intent(MainActivity.this, MainActivity4.class);
51             startActivity(intent);
52
53             break;
54         }
55
56         }
57     }
58
59 }

 1 public class MainActivty1_2 extends Activity {
 2
 3     private TextView textView;
 4
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         // TODO Auto-generated method stub
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.main2);
10         Button button = (Button) findViewById(R.id.but);
11         button.setText("改变");
12         textView = (TextView) findViewById(R.id.text);
13         button.setOnClickListener(new OnClickListener() {
14
15             @Override
16             public void onClick(View v) {
17                 // TODO Auto-generated method stub
18                 textView.setText("textView改变了");
19             }
20         });
21     }
22 }

public class Fragment1 extends android.support.v4.app.Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubreturn inflater.inflate(R.layout.view1, container, false);}
}

 1 public class Myfragment2 extends Fragment{
 2
 3
 4     @Override
 5     public View onCreateView(LayoutInflater inflater, ViewGroup container,
 6             Bundle savedInstanceState) {
 7         // TODO Auto-generated method stub
 8         //resource:需要加载的布局文件
 9         //root:layout的viewGrup
10         // attachToRoot:false 不返回父viewGrup
11         View view = inflater.inflate(R.layout.fragment, container, false);
12         TextView textView=(TextView) view.findViewById(R.id.text);
13         textView.setText("动态加载fragment");
14         return  view;
15     }
16
17 }

、、//--------------------生命周期--------------------
 1 public class Myfragment4_life extends Fragment {
 2
 3     // 1.当Fragment被添加到Activity时候会回调这个方法,并且只调用一次
 4     @Override
 5     public void onAttach(Activity activity) {
 6         // TODO Auto-generated method stub
 7         super.onAttach(activity);
 8     }
 9
10     // 2.创建fragment时会回调,只调用一次
11     @Override
12     public void onCreate(Bundle savedInstanceState) {
13         // TODO Auto-generated method stub
14         super.onCreate(savedInstanceState);
15     }
16
17     // 3.每次创建都会绘制Fragment的view组件时回调该方法
18     @Override
19     public View onCreateView(LayoutInflater inflater, ViewGroup container,
20             Bundle savedInstanceState) {
21         // TODO Auto-generated method stub
22         View view = inflater.inflate(R.layout.fragment, container, false);
23         TextView textView = (TextView) view.findViewById(R.id.text);
24
25         return view;
26     }
27
28     // 4.当fragment所在的Activity启动完成后调用
29     @Override
30     public void onActivityCreated(Bundle savedInstanceState) {
31         // TODO Auto-generated method stub
32         super.onActivityCreated(savedInstanceState);
33     }
34
35     // 5.进入启动fragment
36     @Override
37     public void onStart() {
38         // TODO Auto-generated method stub
39         super.onStart();
40     }
41
42     // 6.恢复fragment时会被调用,调用onStart()方法后面一定会调用onResume()
43     @Override
44     public void onResume() {
45         // TODO Auto-generated method stub
46         super.onResume();
47     }
48
49     // 7.暂停fragment时会被调用
50     @Override
51     public void onPause() {
52         // TODO Auto-generated method stub
53         super.onPause();
54     }
55
56     // 8.停止fragment时会被调用
57     @Override
58     public void onStop() {
59         // TODO Auto-generated method stub
60         super.onStop();
61     }
62
63     // 9.销毁fragment所包含的view组件时
64     @Override
65     public void onDestroyView() {
66         // TODO Auto-generated method stub
67         super.onDestroyView();
68     }
69
70     // 10.销毁fragment时会被调用
71     @Override
72     public void onDestroy() {
73         // TODO Auto-generated method stub
74         super.onDestroy();
75     }
76
77     // 11.fragment从activity中删除时会回调该方法。只调用一次
78     @Override
79     public void onDetach() {
80         // TODO Auto-generated method stub
81         super.onDetach();
82     }
83 }

//---------------------fragment与activity通信----------------------------

//        Fragment与Activity通信
//        (1)Fragment可以调用getActivity()方法获取它所在的Activity;
//        (2)Activity可以调用FragmentManager的findFragmentById()
//          或者findFragmentByTag()方法获取Fragment。//          Activity --> Fragment:在Activity中创建Bundle数据包,
//        并调用Fragment的setArguments(Bundle bundle)方法,
//        然后在Fragment中使用getArguments()获取Bundle数据包。//        Fragment --> Activity:需要在Fragment中定义一个内部回调接口,
//        再让包含该Fragment的Activity实现该回调接口。
//        这样Fragment可调用该回调方法将数据传递给Activity。
public class MainActivity4 extends Activity implements MyListener {private Button button;private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.main4);button = (Button) findViewById(R.id.send);editText = (EditText) findViewById(R.id.editText);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubString text = editText.getText().toString().trim();Myfragment5 fMyfragment5 = new Myfragment5();
//                  Activity --> Fragment:在Activity中创建Bundle数据包,
//                并调用Fragment的setArguments(Bundle bundle)方法,
//                然后在Fragment中使用getArguments()获取Bundle数据包。Bundle bundle = new Bundle();bundle.putString("name", text);fMyfragment5.setArguments(bundle);FragmentManager fragmentManager = getFragmentManager();FragmentTransaction beginTransaction = fragmentManager.beginTransaction();beginTransaction.add(R.id.layout, fMyfragment5, "fragment5");beginTransaction.commit();Toast.makeText(MainActivity4.this, "向fragment发送数据"+text, 1).show();}});// 静态加载FragmentManager fragmentManager = getFragmentManager();Fragment findFragmentById = fragmentManager.findFragmentById(R.id.f);Myfragment1 frag = (Myfragment1) findFragmentById;frag.setAa("xxxxxxxxxxxx静态传值xxx");}@Overridepublic void thank(String code) {// TODO Auto-generated method stubToast.makeText(MainActivity4.this, "成功接收到。。"+code, 1).show();}
}


 1 public class Myfragment5 extends Fragment {
 2     private String code = "thank you";
 3     public MyListener listener;
 4 //    Fragment --> Activity:需要在Fragment中定义一个内部回调接口,
 5 //    再让包含该Fragment的Activity实现该回调接口。class MainActivity4 extends Activity implements MyListener
 6 //    这样Fragment可调用该回调方法将数据传递给Activity。
 7     public interface MyListener {
 8         public void thank(String code);
 9
10     }
11
12     // 1.当Fragment被添加到Activity时候会回调这个方法,并且只调用一次
13     @Override
14     public void onAttach(Activity activity) {
15         // TODO Auto-generated method stub
16         listener = (MyListener) activity;
17         super.onAttach(activity);
18     }
19 //-------------------------------接收activity传值-开始--------------------
20     @Override
21     public View onCreateView(LayoutInflater inflater, ViewGroup container,
22             Bundle savedInstanceState) {
23         // TODO Auto-generated method stub
24         View view = inflater.inflate(R.layout.fragment, container, false);
25         TextView textView = (TextView) view.findViewById(R.id.text);
26   //获取Bundle()传过来的数据包
27         String text = getArguments().get("name") + "";
28         textView.setText(text);
29         Toast.makeText(getActivity(), "已成功接收" + text, 1).show();
30
31 //---------------------------------接收结束-------------------
32
33         Toast.makeText(getActivity(), "向ACtivity发送" + code, 1).show();
34
35         listener.thank(code);
36
37         return view;
38     }
39 }

Fragment与Activity通信
(1)Fragment可以调用getActivity()方法获取它所在的Activity;
(2)Activity可以调用FragmentManager的findFragmentById()或者findFragmentByTag()方法获取Fragment。
Activity --> Fragment:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法,然后在Fragment中使用getArguments()获取Bundle数据包。
Fragment --> Activity:需要在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口。这样Fragment可调用该回调方法将数据传递给Activity。
将数据(这里是字符串 code) 从Fragment 传给 Activity:
1.定义一个接口 MyListener,里面定义一个无方法体的方法thank( String str);
2.创建 MyListener对象 listener;
3.重写方法 onAttach(Activity activity);将activity强制转换为MyListener并赋值给 listener;
4.在方法 onCreateView中写上 listener.thank(code); 实际上就是把数据 code 传递给了 activity!

转载于:https://www.cnblogs.com/my334420/p/6719939.html

Android攻城狮fragment相关推荐

  1. 写给即将/正在找工作的Android攻城狮

    写给即将/正在找工作的Android攻城狮 版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 这段时间从北上广深杭不断传来一两个月找不到工作的消息,我一 ...

  2. Android攻城狮ListView

    适配器: 数据适配器:把复杂的数据填充在指定的视图界面上ArrayAdapter 数组适配器 用于绑定格式单一的数据 数据源:可以是集合或数组 SimpleAdapter 简单适配器:用于绑定格式复杂 ...

  3. Android攻城狮Gallery和ImageSwitcher制作图片浏览器

    使用Gallery 和 ImageSwitcher 制作图片浏览器 Gallery介绍 我们有时候在手机上或者PC上看到动态的图片,可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据 ...

  4. Android攻城狮GestureDetector和GestureOverlayView

    手势识别 可以通过以下两种方式实现: 1. 使用GestureDetector 2. 使用GestureOverlayView(属于线程的控件)手势交互过程(原理): 1. 触屏一刹那,触发 Moti ...

  5. Android攻城狮AsyncTask

    构建AsyncTack子类的参数 AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定如下三个泛型参数: para ...

  6. Android攻城狮ScrollView

    ScrollView 滚动视图 滚动视图是指当前拥有很多内容,屏幕显示不完整时,需要通过滚动来显示完整的视图. ----------------------------- ScrollBar分两种: ...

  7. Android攻城狮ViewFlipper

    使用ViewFlipper实现屏幕切换动画效果. ViewFlipper和ViewPager一样,都是Android自带的一个多页面管理控件,不同的是ViewPager是手动切换页面,而ViewFli ...

  8. Android攻城狮数据存储之SharedPreferences

    Android的四种数据存储方式: 1. SharedPreferences 2. SQLite 3. Content Provider 4. File --------------------- S ...

  9. Android攻城狮认识ContextMenu

    什么是ContextMenu? 例如Windows系统的右键菜单,在Android中长按某个文件夹,会跳出菜单,这个菜单就是ContextMenu. ContextMenu与OptionMenu的区别 ...

最新文章

  1. 四位共阳极数码管显示函数_【项目8-任务10-小组13】利用四位数码管实现动态扫描显示...
  2. XCTF-MISC-新手区-掀桌子
  3. 创建vue项目(四)路由相关知识、路由守卫、插槽、打包小细节
  4. 推荐算法--利用用户行为数据(02)
  5. 利用工厂模式实现怪物系统
  6. [C++] Pure Virtual Function and Abstract Class
  7. 定制Bootstrap3
  8. Day3 01 枚举
  9. Visual Studio Code (vscode) 配置 C / C++ 环境
  10. 解决办法:undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
  11. linux iptable 使用指南
  12. fighter_zzh_Steam控制器,即将推出Linux的Street Fighter V以及更多开放式游戏新闻
  13. 计算机键盘上除在哪里,backspace键在哪里
  14. QT5 QLineEdit QTextEdit右键菜单的汉化
  15. 关于正确处理0x80070426等错误的方法
  16. 西门子1200与FANUC机器人Profinet通讯
  17. VHDL数字频率计的设计
  18. 计算机网络工程师等级考试,计算机四级网络工程师等级考试真题_3.doc
  19. 爱克发胶片_Agfa(爱克发)胶片
  20. Katex的markdown常用语法中一些关于Latex数学符号或公式等的笔记

热门文章

  1. 如来分形 大圣败北 ——如来会分形的取证调查
  2. 蓝牙(BlueTooth)技术标准
  3. STMCubeMX+Proteus仿真DHT11(数码管显示)
  4. python实现凯撒密码加密与解密(暴力求解)
  5. 前端非框架类知识点汇总
  6. VScode启动流程
  7. 寻道,思考人生的价值(观小米十周年演讲有感)
  8. 4G 工业路由器并入cisco专网
  9. Ubuntu 16.04 鼠标可以移动不能点击问题
  10. mac android 录屏软件,mac录屏怎么录内置声音?详细的解决方案