Framgment的使用
来源:互联网 发布:标识设计软件 编辑:程序博客网 时间:2024/05/20 03:46
Fragment在Android中时经常使用的一个东西,虽然不是Activity,但是跟Activity的地位差不多。Fragment也有自己的生命周期。
onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->onPause()->onStop()->onDestroy()->onDestory()->onDetach()
onAttach()->onCreate()->onCreateView()->onActivityCreated()相当于Activity的onCreate()
onStart()相当于Activity的onStart()
onResume()相当于Activity的onResume()
onPause()相当于Activity的onPause()
onStop()相当于Activity的onStop()
onDestroy()->onDestory()->onDetach()相当于Activity的onDestroy()
Fragment最开始Android3.0(api 11)出现的,主要是为了解决Pad碎片化问题。当然现在你可以导入support-v4的包使用它。
Fragment的基本使用有两种,一种是静态的创建,一种是动态的创建。
1.静态的创建
(1).activity_main.xml,在一个xml文件中创建了两个fragment
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <fragment android:id="@+id/fragment1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:name="com.egos.fragmentsample.Fragment1" /> <fragment android:id="@+id/fragment2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:name="com.egos.fragmentsample.Fragment2" /></LinearLayout>
(2).分别创建两个Fragment
Fragment1.java
public class Fragment1 extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// TODO Auto-generated method stubreturn inflater.inflate(R.layout.fragment1, container, false);}}Fragment2.java
public class Fragment2 extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// TODO Auto-generated method stubreturn inflater.inflate(R.layout.fragment2, container, false);}}(3).创建MainActivity.java
public class MainActivity extends FragmentActivity {@Overrideprotected void onCreate(Bundle arg0) {super.onCreate(arg0);setContentView(R.layout.activity_main);}}2.动态的创建
(1).创建Fra gment的布局
fragment_dynamic.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a fragment" /></LinearLayout>
(2).创建DynamicFragment.java
public class DynamicFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// TODO Auto-generated method stubreturn inflater.inflate(R.layout.fragment_dynamic, container, false);}}
(3).创建MainActivity.java以及activity_mian2.xml
MainActivity.java
public class MainActivity extends FragmentActivity {@Overrideprotected void onCreate(Bundle arg0) {super.onCreate(arg0);setContentView(R.layout.activity_main2);if (arg0 == null) {getSupportFragmentManager().beginTransaction().add(R.id.container, new DynamicFragment()).commit();}}}activity_mian2.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"/></LinearLayout>
可见是通过FragmentManager来管理创建一个Fragment的,可以动态的创建。
那么Aativity和Fragment之应该如何通信呢?上面的情况是通过Activity动态的创建了一个Fragment,那么我操作Fragment里面的内容如何来改变Activity里面的一写信息呢?
在Fragment中是可以通过getActivity来得到对应的Activity的信息的,同时在Activity是可以通过ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);来得到Fragment的信息的。
那么改变Fragment里面的内容是如何来改变Activity里面的信息的呢?一般的情况是通过Listener来实现的。例如:我现在的需求是点击左边的ListView中的item然后来改变相对应的右边的信息。
大概的显示如下。
这样就是在LeftFragment中做一个Listener
public void setOnClickCategory(OnClickCategory listener){ this.listener = listener;}public interface OnClickCategory{ public void onClick(String category);}然后在点击item的时候做相应的操作。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragment_left, container, false); listview = (ListView) view.findViewById(R.id.category); adapter = new LeftAdapter(getActivity(), str); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { listener.onClick(str[position]); } }); return view;}最后只需要在Activity中实现这个接口就行了。
@Overridepublic void onClick(String category){ fragmentRight = new RightFragment(category); getSupportFragmentManager().beginTransaction().replace(R.id.right, fragmentRight).commit();}源代码
点击打开链接
- Framgment的使用
- Android-节日短信送祝福(UI篇:2-展示节日列表的Framgment的创建)
- android开发笔记:framgment相关
- <Android 异常> Framgment常见异常
- Framgment未添加则添加,已添加则通过显示隐藏控制代码
- GUID使用的使用
- ${}的使用
- 的使用
- @[],@()的使用
- ->的使用
- +、-、*、/、%的使用
- &&的使用
- %:的使用
- Makefile中使用$$的使用
- Makefile中使用$$的使用
- Red5的使用--使用日志
- prefernce的使用具体使用
- 【工具使用】git 的使用
- windows 10 关闭自动更新
- mbprogresshud简单使用
- Fragment的生命周期
- 1024. 科学计数法 (20)
- kindeditor初学
- Framgment的使用
- 遍历数组
- ROS_hydro_catkin建立标准程序包_helloworld.h+helloworld.cpp+helloworldnode.cpp
- Struts2基础复习系列(1)
- 微信学习系列
- openCV3 Track Bar
- hadoop编程:暴力破解ZIP密码
- Java的ArrayDeque使用例程
- Android之自定义View的封装