Fragment是AndroID3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段!想想,如果一个很大的界面,我们 就一个布局,写起界面来会有多麻烦,而且如果组件多的话是管理起来也很麻烦!而使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理!从而可以更加方便的在 运行过程中动态地更新Activity的用户界面!另外Fragment并不能单独使用,他需要嵌套在Activity 中使用,尽管他拥有自己的生命周期,但是还是会受到宿主Activity的生命周期的影响,比如Activity 被destory销毁了,他也会跟着销毁!
1.2 子类对话框:DialogFragment
列表:ListFragment
选项设置:PreferenceFragment
WebVIEw界面:WebVIEwFragment
5.2 加入背景图片
5.3 activity_main.xml
<?xml version="1.0" enCoding="utf-8"?><FrameLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" xmlns:tools="http://schemas.androID.com/tools" androID:ID="@+ID/container" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context=".MainActivity"></FrameLayout>
5.4 创建第一个碎片5.5 修改第一个碎片布局文件
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="@drawable/picture01" androID:gravity="center" androID:orIEntation="vertical" tools:context=".FirstFragment"> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginBottom="20dp" androID:text="@string/first_fragment" androID:textcolor="#ff0000" androID:textSize="25sp"/> <button androID:ID="@+ID/btnNextFragment" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:onClick="doNextFragment" androID:text="@string/next_fragment"/></linearLayout>
5.6 创建第二个碎片5.7 修改第二个碎片的布局文件<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="@drawable/picture02" androID:gravity="center" androID:orIEntation="vertical" tools:context=".FirstFragment"> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginBottom="20dp" androID:text="@string/second_fragment" androID:textcolor="#00ff00" androID:textSize="25sp" /> <button androID:ID="@+ID/btnNextFragment" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:onClick="doNextFragment" androID:text="@string/next_fragment"/></linearLayout>
5.8 创建第三个碎片5.9 修改第三个碎片的布局文件<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="@drawable/picture03" androID:gravity="center" androID:orIEntation="vertical" tools:context=".FirstFragment"> <TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginBottom="20dp" androID:text="@string/third_fragment" androID:textcolor="#0000ff" androID:textSize="25sp" /> <button androID:ID="@+ID/btnNextFragment" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:onClick="doNextFragment" androID:text="@string/next_fragment"/></linearLayout>
5.10 修改字符串文件<resources> <string name="app_name">切换碎片</string> <string name="first_fragment">第一个碎片</string> <string name="second_fragment">第二个碎片</string> <string name="third_fragment">第三个碎片</string> <string name="next_fragment">下一个碎片</string></resources>
5.11 修改主界面文件package net.nell.switchfragment;import androID.os.Bundle;import androIDx.appcompat.app.AppCompatActivity;import androIDx.fragment.app.FragmentManager;public class MainActivity extends AppCompatActivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); // 获取碎片管理器 FragmentManager fm = getSupportFragmentManager(); // 在主容器里添加第一个碎片 fm.beginTransaction().add(R.ID.container, new FirstFragment()).commit(); }}
5.12 修改第一个碎片界面类package net.nell.switchfragment;import androID.os.Bundle;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.button;import androIDx.fragment.app.Fragment;public class FirstFragment extends Fragment { private button btnNextFragment; public FirstFragment() { } @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { // 获取碎片视图 VIEw vIEw = inflater.inflate(R.layout.fragment_first, container, false); // 通过资源标识获得控件实例 btnNextFragment = vIEw.findVIEwByID(R.ID.btnNextFragment); // 给按钮注册监听器 btnNextFragment.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { getFragmentManager().beginTransaction() .addToBackStack("next") .replace(R.ID.container, new SecondFragment()) .commit(); } }); // 返回视图 return vIEw; }}
5.13 修改第二个碎片界面类package net.nell.switchfragment;import androID.os.Bundle;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.button;import androIDx.fragment.app.Fragment;public class SecondFragment extends Fragment { private button btnNextFragment; public SecondFragment() { } @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { // 获取碎片视图 VIEw vIEw = inflater.inflate(R.layout.fragment_second, container, false); // 通过资源标识获得控件实例 btnNextFragment = vIEw.findVIEwByID(R.ID.btnNextFragment); // 给按钮注册监听器 btnNextFragment.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { getFragmentManager().beginTransaction() .addToBackStack("next") .replace(R.ID.container, new ThirdFragment()) .commit(); } }); // 返回视图 return vIEw; }}
5.14 修改第三个碎片界面类package net.nell.switchfragment;import androID.os.Bundle;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.button;import androIDx.fragment.app.Fragment;public class ThirdFragment extends Fragment { private button btnNextFragment; public ThirdFragment() { } @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { // 获取碎片视图 VIEw vIEw = inflater.inflate(R.layout.fragment_third, container, false); // 通过资源标识获得控件实例 btnNextFragment = vIEw.findVIEwByID(R.ID.btnNextFragment); // 给按钮注册监听器 btnNextFragment.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { getFragmentManager().beginTransaction() .addToBackStack("next") .replace(R.ID.container, new FirstFragment()) .commit(); } }); // 返回视图 return vIEw; }}
5.15 运行效果6.代码优化6.1 创建碎片列表类
package net.nell.switchfragment;import androIDx.fragment.app.Fragment;import java.util.ArrayList;import java.util.List;public class FragmentList { public static List<Fragment> fragments = new ArrayList<>();}
6.2 修改主界面类package net.nell.switchfragment;import androID.os.Bundle;import androIDx.appcompat.app.AppCompatActivity;import androIDx.fragment.app.FragmentManager;public class MainActivity extends AppCompatActivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 利用布局资源文件设置用户界面 setContentVIEw(R.layout.activity_main); // 获取碎片管理器 FragmentManager fm = getSupportFragmentManager(); // 创建三个碎片,添加到碎片列表 FragmentList.fragments.add(new FirstFragment()); FragmentList.fragments.add(new SecondFragment()); FragmentList.fragments.add(new ThirdFragment()); // 在主容器里添加第一个碎片 fm.beginTransaction().add(R.ID.container, FragmentList.fragments.get(0)).commit(); }}
6.3 修改第一个碎片类6.4 修改第二个碎片类6.5 修改第三个碎片类6.6 运行程序,查看结果总结
以上是内存溢出为你收集整理的Android学习记录(十二)全部内容,希望文章能够帮你解决Android学习记录(十二)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)