Miles' Blog

天涯何處無幹話,何必要講實務話

Fragment

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

Template

基本樣版

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() {}
}

FAQ

經典麻煩的問題:

  • 由 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

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

參考資料

0%