Framgment的使用
2015-11-28 23:22
246 查看
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
(2).分别创建两个Fragment
Fragment1.java
(1).创建Fra gment的布局
fragment_dynamic.xml
(2).创建DynamicFragment.java
(3).创建MainActivity.java以及activity_mian2.xml
MainActivity.java
可见是通过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
点击打开链接
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 { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment1, container, false); } }Fragment2.java
public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment2, container, false); } }(3).创建MainActivity.java
public class MainActivity extends FragmentActivity { @Override protected 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 { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment_dynamic, container, false); } }
(3).创建MainActivity.java以及activity_mian2.xml
MainActivity.java
public class MainActivity extends FragmentActivity { @Override protected 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中实现这个接口就行了。
@Override public void onClick(String category) { fragmentRight = new RightFragment(category); getSupportFragmentManager().beginTransaction().replace(R.id.right, fragmentRight).commit(); }源代码
点击打开链接
相关文章推荐
- 【学神-RHEL7】1-6-RHEL7用户管理和如何恢复root密码
- Android平台多国语的语言以及国家的代码参考
- C语言开发总结(十六)
- HDU 5586 Sum(最大连续子序列和)——BestCoder Round #64(div.1 div.2)
- PHP上传(单个)文件示例
- 【南大软院大神养成计划:第十二天&第十三天】JS,进阶的巨人(二)
- ajax实现简单的商品展示
- POJ 2773 Happy 2006(容斥原理)
- 【伸展树】[CQBZOJ2803]普通平衡树splay top_down模板
- POJ 2155 Matrix
- 【B/S学习总结】我的第100篇CSDN博客
- 利用ajax异步校验验证码
- BestCoder Round #64 (div.2) 1002 Sum HDU 5586 联机算法
- Android-Ubuntu系统中使用Android studio并导入Android5.1源码
- 备忘录--最近一些总结
- Find the Duplicate Number
- 【转载】html中object标签详解
- BestCoder Round #64 (div.2) A Numbers&&HDU 5585
- UVa 11721 Instant View of Big Bang
- HDU5586 最大连续和 xingxing在努力