[学习笔记]用户界面优化之Android Fragment
来源:互联网 发布:股票医生软件下载 编辑:程序博客网 时间:2024/06/05 15:05
以下内容纯粹为本人学习笔记【记录】之用,所听课程(Q群群友百度网盘提供)为极客学院一位老师所讲(老师大名我尚未知晓),如有侵权请告知。在此特别感谢这位老师录制的视频资料。
用户界面优化 UIO User Interface Optimizing
Fragment n.碎片、片段;v.碎裂、破裂、分裂
Refactor v.重构
Android Fragment
1、使用Fragment
为什么要使用Fragment?一个应用程序,大部分都会使用到界面切换功能,同一个应用程序的内部做界面切换的话,(之前使用Activity进行切换)使用Activity不合适了(原因:Activity是一个比较重量级的基本组件,用在内部切换,有点儿杀鸡用牛刀),更好的替代方式即是Fragment莫属了,优点:轻量级、灵活。
实例:在FragmentMain添加一个按钮,点击,进入第二个界面FragmentB,如何操作?
1)添加按钮
2)第二个布局文件xml和对应的类
3)添加界面跳转的监听代码
MainActivity.java
package com.keen.learnfragment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { //呈现Fragment的操作方式的4个步骤:获取;开始变化;添加新的Fragment(第1个参数是主容器);提交 getSupportFragmentManager().beginTransaction() .add(R.id.activity_main, new PlaceholderFragment()) .commit(); } }}
对应activity_main.xml默认就好。
PlaceholderFragment.java
package com.keen.learnfragment;import android.support.v4.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class MainFragment extends Fragment { //这个类需要继承自android.support.v4.app.Fragment public MainFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); //按钮(点击进入FragmentB的)事件监听器 rootView.findViewById(R.id.btnShowFragmentB).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getFragmentManager().beginTransaction() .addToBackStack(null) .replace(R.id.activity_main, new Fragment_b()) .commit(); //addToBackStack()支持按返回退到当前界面(Fragment) } }); return rootView; }}
注:这里无须像自动创建Fragment方式一样,用PlaceholderFragment
fragment_main.xml添加一个按钮用于点击就跳转到fragment_b
<Button android:id="@+id/btnShowFragmentB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是FragmentMain,按钮为呈现Fragment B"/>
Fragment_b.java
package com.keen.learnfragment;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment_b extends Fragment{ //这个类需要继承自android.support.v4.app.Fragment @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //初始化布局,第一个参数是需要解析的布局fragment_b,第二个参数是主布局container View root = inflater.inflate(R.layout.fragment_b, container, false); root.findViewById(R.id.btnBack).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getFragmentManager().popBackStack(); } }); return root; }}
对应的fragment_b.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是Fragment B" android:id="@+id/textView" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="后退" android:id="@+id/btnBack" /></LinearLayout>
逻辑思维图
效果图
注:从1.4.1开始就没有创建Project带Blank Activity with Fragment模式了。
须单独New Fragment
2、Fragment生命周期
onCreate()–onCreateView()–onPause()主要是掌握这3个即可
重写这3个方法,输出打印日志以观察Fragment的生命周期。
如:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("Fragment生命周期", "onCreate"); } @Override public void onPause() { super.onPause(); Log.d("Fragment生命周期", "onPause"); }
查看Android帮助文档
在线查看帮助文档
http://www.android-doc.com/guide/components/fragments.html
3、带侧边栏的Activity
New–Activity–Navigation Drawer Activity
Navigation Drawer Activity 译为“导航抽屉活动”,用来实现导航栏(或菜单栏)抽屉式效果,即侧滑导航栏设计风格
参考文章:http://www.codeceo.com/article/android-navigationdrawer.html
fragment_main.xml添加一个按钮,用于启动SliderActivity
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动有侧边栏的Activity" android:id="@+id/btnStartSliderActivity"/>
MainFragment.java添加访问到这个按钮的代码、以及添加事件监听器
//访问到按钮 rootView.findViewById(R.id.btnStartSliderActivity).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //添加事件监听器 startActivity(new Intent(getActivity(), SliderActivity.class)); } });
4、Tabbed Activity
译为 标签活动
新建一个类Image1Fm.java,用于显示
package com.keen.learnfragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;public class Image1Fm extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ImageView iv = new ImageView(getActivity()); iv.setImageResource(R.drawable.img1); return iv; }}
同样创建Image2Fm.java和Image3Fm.java。
package com.keen.learnfragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;public class Image2Fm extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ImageView iv = new ImageView(getActivity()); iv.setImageResource(R.drawable.img2); return iv; }}
package com.keen.learnfragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;public class Image3Fm extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ImageView iv = new ImageView(getActivity()); iv.setImageResource(R.drawable.img3); return iv; }}
接着修改Tabs.java代码,主要是修改getItem()方法
@Override public Fragment getItem(int position) { switch (position){ case 0: return new Image1Fm(); case 1: return new Image2Fm(); case 2: return new Image3Fm(); } // getItem is called to instantiate the fragment for the given page. // Return a PlaceholderFragment (defined as a static inner class below). return null; }
Fragment灵活性远远大于Activity,而且因为在应用程序内部,不需要创建基本组件,也无需在manifest里注册,因此,效果也是非常高的。
- [学习笔记]用户界面优化之Android Fragment
- [学习笔记]用户界面优化之Android ViewPager
- [学习笔记]用户界面优化之Android SurfaceView的使用
- [学习笔记]用户界面优化之Android侧滑菜单(DrawerLayout使用)
- android学习笔记之Fragment
- Android学习笔记之fragment
- Android学习笔记之Fragment
- [学习笔记]用户界面优化之2D翻转
- [学习笔记]用户界面优化-Android自定义视图动画
- Android 4学习(8):用户界面 - Fragment
- Android学习笔记8——用户界面之Activty
- Android学习笔记12——用户界面之Loader类
- Android应用开发学习笔记之Fragment
- android学习笔记之Fragment(三)
- android学习笔记之Fragment(二)
- android学习笔记之Fragment(一)
- Android Fragment系列学习笔记之二
- Android Fragment系列学习笔记之三
- JavaScript学习记录(4)
- spark报错:ERROR SparkUI: Failed to bind SparkUI,解决办法
- 图片无缝滚动
- 今天做到一道面试题:Android中进程的通信方式
- Java反射获取构造方法
- [学习笔记]用户界面优化之Android Fragment
- function自定义函数99乘法表
- 2017暑期实习招聘-产品经理-广联达(2轮面试)
- 再悟HTML+CSS+JS
- LeetCoder 18. 4Sum
- 19、在socket中使用域名
- 递归算法练习
- 两数组的交二
- 20、理解UDP套接字