Android学习--《Fragment》

来源:互联网 发布:全球人工智能产业规模 编辑:程序博客网 时间:2024/04/30 15:17

概要:

fragment可以看作是一个子acitity,它具有自己的生命周期,与输入事件

可以在不同的activity里复用,是activity模块化的一部分 可重用,模块化的UI组件


创建:

必须重写的回调方法 onCreateView(), 用来定义布局

示例:

import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.ViewGroup;public class ArticleFragment extends Fragment {    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,        Bundle savedInstanceState) {        // Inflate the layout for this fragment        return inflater.inflate(R.layout.article_view, container, false);    }}

添加

添加fragment到一个activity中有两种方法,一种是静态添加的,一种是动态的

静态添加

就是通过xml文件添加到布局中,但是这样无法对fragment进行操作

动态添加

FragmentManager 类在 Activity 运行时 对 Fragment 进行添加,移除,替换

FragmentManager => (beginTransation()) 创建一个FargmentTransation => (add()) 添加一个Fragment

Tips:

  • 我们需要设置一个空的View作为fragment的容器,如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/fragment_container"    android:layout_width="match_parent"    android:layout_height="match_parent" />
  • 我们通过FragmentTransation进行多级事务后,要 通过 commits() 提交
//以下代码要写在 A次vity 的 onCreated() 方法里// Create a new Fragment to be placed in the activity layout            HeadlinesFragment firstFragment = new HeadlinesFragment();            // In case this activity was started with special instructions from an            // Intent, pass the Intent's extras to the fragment as arguments            firstFragment.setArguments(getIntent().getExtras());            // Add the fragment to the 'fragment_container' FrameLayout            getSupportFragmentManager().beginTransaction()                    .add(R.id.fragment_container, firstFragment).commit(); //最后commit()
  • replace()只要将add()替换就可以完成了。

  • 注意:移除和替换后,我们要让用户可以向前撤销这次操作,那么在commit前,就必须调用 addToBackStack() 方法


Fragment之间的交互

Fragment之间是不应该交互的,但是可以通过宿主activity来进行间接的交互

那么Fragment和activity之间如何交互呢?

第一种情况:Fragment到Activity

大概流程:

  1. 在fragment里定义一个接口 A
  2. 在acivity中实现这个接口,(implent A)
  3. 在fragment的onAttach()方法中获取接口的方法,然后调用接口方法来和activity交互

这个过程还是看代码回更加清晰一些:

//在fragment中定义接口public class HeadlinesFragment extends ListFragment {    OnHeadlineSelectedListener mCallback;    // Container Activity must implement this interface    public interface OnHeadlineSelectedListener {        public void onArticleSelected(int position);    }    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        // This makes sure that the container activity has implemented        // the callback interface. If not, it throws an exception        try {            mCallback = (OnHeadlineSelectedListener) activity;        } catch (ClassCastException e) {            throw new ClassCastException(activity.toString()                    + " must implement OnHeadlineSelectedListener");        }    }    ...}

之后fragment中任何地方都可以使用 mCallback.onArticleSelected(position)来调用activity中实现的此方法

当然activity中怎么实现就随意了

0 0
原创粉丝点击