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);

0 0
原创粉丝点击