Fragment 碎片的案例讲解
来源:互联网 发布:lua for mac 编辑:程序博客网 时间:2024/05/17 21:53
Fragment 碎片的案例讲解
概念
碎片是可以嵌入在活动中的UI片段,它可以充分和合理的利用平板屏幕的空间。碎片也可称为mini型的活动,它跟活动一样可以拥有布局,也有着自己的生命周期。通过下面的例子简单理解一下:
在一个新闻软件开发中,手机端设计思想是:其中一个界面使用RecyclerView显示新闻标题列表,当点击一条新闻标题,显示另一个界面新闻内容信息。这样我们可以将新闻 标题放在一个活动中,新闻内容信息放在另一个活动中。这样的设计思路如果用在平板上,在新闻标题显示是,会被拉长控件,控件内容会有很多留白,UI美观上会大大打折扣,因此手机端设计思路不能使用在平板上。
在平板上,如果我们使用碎片思想如下设计:将新闻标题设计成一个碎片,新闻内容设计成一个碎片,两个碎片同时加载到一个活动中,这样就可以充分利用平板屏幕的空间了。
接下来就以新闻软件为例来展示碎片在平板中的使用,并且对碎片有一个整体的理解。实现动态添加碎片和在碎片中模拟返回栈。
UI布局的设计
为碎片设置布局,首先左侧碎片布局就是一个button按钮。右侧碎片布局是一个TextView 控件用来显示一段文字。为了实现动态添加碎片右侧创建两个碎片布局以背景颜色区分一个绿色,一个黄色。 代码如下:
left_fragment.xml
right_fragment.xml
another_right_fragment.xml
碎片类的创建
接着为三个布局创建相应的碎片类,碎片类需要继承fragment,并且重写方法onCreateView(),在该方法中使用LayoutInflater.inflate()将碎片布局加载进来就可以了。
LeftFragment.java
public class LeftFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view= inflater.inflate(R.layout.left_fragment,container, false); return view; }}
RightFragment.java
public class RightFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view= inflater.inflate(R.layout.right_fragment, container, false); return view; }}
AnotherRightFragment.java
public class AnotherRightFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.another_right_fragment,container,false); return view; }}
注意: Fragment 碎片类 有两个包供你选择,一个是系统内置的dandroid.app.fragment, 一个是support-v4库中的android.support.v4.app.fragment。support-v4库不需要特别加入依赖引用,因为build.gradle文件中已有的appcompat-v7库在导入时,会将support-v4一起导入,所以不需要额外添加依赖。 强烈建议选择support-v4库中的android.support.v4.app.fragment, 因为该包中的类可以保证碎片功能在所有android系统上保持一致性,而系统内置的包在android4.2之前并不支持碎片嵌套碎片功能,support-v4则针对所有系统都支持。
Main 布局
将碎片标签加入Activity_main.xml 布局中,在标签中需要通过android:name属性显示声明碎片类名,注意一定要将包名加上。另外新闻内容的布局我们放置一个FrameLayout来添加碎片,FrameLayout表示将添加的碎片布局以左上角显示非常适合放置一个空间的布局。
Activity_main.xml
活动的点击事件
在MainActivity.java类中首先为左侧的新闻标题button按钮添加点击事件,然后创建一个replaceFragment(Fragment frag) 方法用来动态替换碎片,
结合下面代码的分析实现动态添加碎片的步骤如下:
1. 创建要替换的碎片类。
2. 获取FragmentManager 类,在活动中可以通过getSupportFragmentManager ()得到。
3. 开启一个碎片事务FragmentTransaction, 通过FragmentManager的beginTransaction()方法获取。
4. 然后通过调用事务的replace方法,传入容器的id和碎片的实例对象。
5. 最后一步,就是提交事务。
public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button)findViewById(R.id.news_title); btn.setOnClickListener(this); replaceFragment(new RightFragment()); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.news_title: replaceFragment(new AnotherRightFragment()); break; default: break; } } public void replaceFragment(Fragment fragment){ FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.right_layout,fragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); }}
在碎片中模拟返回栈
通过上述代码,我们可以看见这样一行代码fragmentTransaction.addToBackStack(null);在事务提交之前添加的,这行代码就是用来模拟返回栈的,它可以接收一个名字用来描述返回栈的状态,一般传入null值。以上实例就到此结束了。 根据一个实例的演练,多少针对碎片有一个使用方面的认识。从使用方面来说它跟活动很类似,也拥有独立的类,同时也有跟活动类似的生命周期,这里描述一下碎片与活动之间的通信。碎片与活动之间的通信:在每一个碎片类中,都可以通过getActivity()方法获取与之相关联的活动类,如下代码:MainActivity mainActivity=(MainActivity)getActivity();而在活动类中入MainActivity ,FragmentManager提供了findFragmentById,可以在活动中获取相应的碎片类, 如下代码:LeftFragment leftFragment=(LeftFragment) getFragmentManager.findFragmentById(R.id.left_fragment);在碎片中能获取活动后,可以通过活动去获取碎片,这样就可以达成不同碎片间的通信。
关于碎片的生命周期,因为篇幅过长,将会在下一篇幅 《碎片的生命周期》 进行详细描述。
- Fragment 碎片的案例讲解
- Android 碎片Fragment讲解
- Fragment(碎片)实用案例
- 碎片(Fragment)的生命周期
- Fragment的碎片化
- Fragment碎片的使用
- Fragment碎片的生命周期
- Fragment碎片的生命周期
- Fragment 碎片的使用
- Fragment:碎片的动态加载
- Fragment(碎片)(2)-的生命周期
- Fragment碎片化的使用
- Fragment(碎片)的使用实例
- Android碎片(Fragment)的创建
- 碎片:Fragment
- 碎片Fragment
- Fragment碎片
- 碎片Fragment
- Android permission 访问权限大全
- Android Studio 配置Github
- winform 只能输入整数或小数
- 单片机I/O口推挽与开漏输出详解
- Java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)
- Fragment 碎片的案例讲解
- Storm中的可靠性
- 用ssh框架写项目时tomcat启动时报错严重: Error configuring application listener of class [org.springframework.web.co
- ASP.NET MVC中的Global.asax文件
- TensorFlow官方文档中文版-笔记(二)
- 27个值得思考的理财问题
- JAVA生成EXCEL文件
- append与 appendTo的区别
- cocos2dx ios中横屏切换竖屏相册崩溃