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();}
源代码
点击打开链接







1 0
原创粉丝点击