Fragment

Fragment 是 Android 3.0 後的新元件,為的是解決手機平板共存的問題。使用起來跟 Activity 很像,但又有點不大一樣,主要的概念就是 Activity 會去呼叫 Fragment;因此 Activity 與 Fragment 的配合就非常重要了。

基本樣版

public class MainFragment extends Fragment {
    private static final String TAG = MainFragment.class.getSimpleName();

    public MainFragment() {}

    /**
     * 用 Resource 取得 View
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment, container, false);
    }

    /**
     * 初始化 View
     */
    @Override
    public void onViewCreated(View rootView, Bundle savedInstanceState)
    {
        initView(rootView);
        initVars(rootView);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        setListener();
        setData();
    }

    protected void initView(ViewGroup rootView) {}
    protected void initVars(ViewGroup rootView) {}
    protected void setListener() {}
    protected void setData() {}
}

經典麻煩的問題:

  • 由 Activity 建立 Fragment
  • Activity 傳值給 Fragment
  • 由 Fragment 建立 Fragment
  • Menu 控制
  • 旋轉螢幕
  • 全螢幕

要在開啟 Fragment 的時候建立選單,就需要在 onCreate 裡多設定 setHasOptionsMenu(true),其他部分就跟 Activity 做法是一樣的:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    // Create Menu
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Listener
    return super.onOptionsItemSelected(item);
}

這應該是最麻煩的,要從一個啟動中的 Fragment 動態傳值給另一個啟動中的 Fragment。