Android笔记FirstCode002
来源:互联网 发布:python需要那些插件 编辑:程序博客网 时间:2024/06/16 07:54
Fragment
动态的添加碎片
实现代码:
case R.id.btn_main_click: AnotherRightFragment fragment = new AnotherRightFragment(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); //参数1:要被替换的布局位置id,参数2:替换的fragment transaction.replace(R.id.right_layout, fragment); transaction.addToBackStack(null);//将事物添加到返回栈中 transaction.commit(); break;
开启一个事物来管理Fragment,使用事物的replace方法完成操作。
在Fragment中模拟返回栈
FragmentTransaction中提供了一个addTobackStack()方法,在FragmentTransaction.commit()前调用该方法,可以将一个事物添加到返回栈中。
Fragment和Activity之间的通信(具体哪一个需要强转一下)
通过Activity找Fragment(在Activity中…)
RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);
通过Fragment找Activity(在Fragment中…)
Activity activity =(MainActivity) getActivity();
Fragment与Fragment之间的通信
思路:首先在一个Fragment中可以得到与它相关联的Activity,然后再通过这个Activity去获取另外一个Fragment的实例。
Fragment的生命周期
1.运行状态
当Fragment是可见的,并且它所关联的Activity正处于运行状态时,该Fragment也处于运行状态。
2.暂停状态
当Activity进入暂停状态时(由于另一个未占满屏幕的Activity被添加到了栈顶,如开启了一个Dialog的Activity),与它相关联的可见的Fragment就进入到暂停状态。
3.停止状态
当Activity进入停止状态时,与它相关联的Fragment就会进入到停止状态。或者通过调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,但在commit之前调用了addToBackStack()方法。这是Fragment对用户来说是完全不可见得,有可能会被系统回收。
4.销毁状态
当Activity被销毁时,它所关联的Fragment就会进入到销毁状态。或者通过调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,没有在commit之前调用addToBackStack()方法。
onAttach();当Activity和Fragment建立关联的时候调用
onCreate();
onCreateView();为Fragment创建视图(加载布局)时调用
onActivityCreated();确保与Fragment相关联的活动一定已经创建完毕的时候调用
onStart();
onResume();
onPause();
onStop();
onDestroyView();当与Fragment关联的视图被移除的时候调用
onDestroy();
onDetach();当Fragment和Activity解除关联的时候调用
动态加载布局的技巧
使用限定符
就是在res目录下新建一个layout-large文件夹,在该文件夹下新建另一种布局。
当那些屏幕被认为是large的设备就会自动加载layout-large文件夹下的布局,而小屏幕的设备则还是会加载layout文件夹下的布局。
Android中一些常见的限定符
大小类:
small: 提供给小屏幕设备的资源normal: 提供给中等屏幕设备的资源 large: 提供给大屏幕设备的资源xlarge: 提供给超大屏幕设备的资源
分辨率
ldpi: 提供给低分辨率设备的资源(120dpi以下)mdpi: 提供给中等分辨率设备的资源(120dpi到160dpi)hdpi: 提供给高分辨率设备的资源(160dpi到240dpi)xhdpi: 提供给超高分辨率设备的资源(240dpi到320dpi)
方向:
land: 提供给横屏设备的资源port: 提供给竖屏设备的资源
使用最小宽度限制符(版本3.2后引入的)
在res目录下新建layout-sw600dp文件夹,在该文件夹下新建另一种布局。
这就意味着,当程序运行在屏幕宽度大于600dp的设备上时,会加载layout-sw600dp中的布局,当程序运行在屏幕宽度小于600dp的设备上时,则仍然加载默认的layout下的布局
注意点
1.Fragment中的onAttach 的区别:
public void onAttach(Context context) { super.onAttach(context); newsList = getNews();//无效,走不到该方法 adapter=new NewsAdapter(activity,R.layout.item_news,newsList); } public void onAttach(Activity activity) { super.onAttach(activity); newsList = getNews();//有效,可以走到 adapter=new NewsAdapter(activity,R.layout.item_news,newsList); }
解决方法:在最新的SDK 23中,Fragment的onAttach(Activity activity)方法不赞成使用了(deprecated ),但是新的方法onAttach(Context context)会出现不被调用的情况。经测试后发现,如果你的设备API小于23,就不会调用新的onAttach()方法。
2.Activity 继承自 AppCompatActivity中的
requestWindowFeature(Window.FEATURE_NO_TITLE)方法无效。
第一种,Activity直接继承自Activity
第二种,使用supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
- Android笔记FirstCode002
- android笔记
- android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android 笔记
- android笔记
- Android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android笔记
- android笔记
- android 笔记
- android 笔记
- RESTful API 设计指南
- 特征工程
- 【常用算法思路分析系列】与二分搜索相关高频题
- Python机器学习库scikit-learn实践
- Apache 屏蔽YisouSpider(一搜蜘蛛\神马)的方法
- Android笔记FirstCode002
- linux下C语言socket网络编程简例
- org.hibernate.PropertyNotFoundException
- Alljoyn 概述(3)
- Winform基础
- Android开发笔记(一百零五)社会化分享SDK
- 秒转为时分秒的oracle函数
- WEB API机制分析
- ffmpeg做hls切片