Fragment

Fragment仅仅是用来对Activity的补充,实现一些Activity的复杂界面和逻辑切换。界面和生命周期都依赖于Activity。在Activity运行时,可以独立操作各个Fragment,Fragment可以接收输入或者各种布局,有点像是子Activity。
补充:support.v4中的Fragment可能当时还不是太完善,必须要在FragmentActivity中才能使用。

Fragment生命周期

几个已经做过扩展的Fragment:

DialogFragment

ListFragment

PreferenceFragment

Fragment操作

添加

在onCreateView()中返回布局,如:

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}

或者通过代码将Fragment添加到一个ViewGroup

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

使用add(Fragment, String)方法来添加后台的Fragment,可以通过getFragmentByTag()来获取。

替换

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

注:addToBackStack(),将Fragment添加到Fragment返回栈,以便back键返回。

管理Fragment

在Activity中,Activity通过FragmentManager来处理Fragment的逻辑。

findFragmentById()
findFragmentByTag()
popBackState()

可以打开一个FragmentTransaction来完成添加或者替换等操作。
FragmentTransaction操作都需要commit(),可以通过设置 setTransition()方法来设置过渡动画。

Fragment于Activity通信

通信可以通过getActivity()来得到Activity实例,通过回调函数来进行传递一些消息、事件之类。在Fragment中定义一些Interface,让Activity来实现它。
通过实现onCreateOptionsMenu()向Activity的Option中添加一些action,不过需要在onCreate()的时候设置setHasOptionsMenu(),还可以得到onOptionsItemSelected()回调。

Activity和Fragment的生命周期同步

results matching ""

    No results matching ""