Fragment 中呼叫 setContentView(R.layout.xxx) 編譯錯誤:Fragment 沒有此方法。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 1. 膨脹佈局
View rootView = inflater.inflate(R.layout.activity_googlev2, container, false);
// 2. 初始化 View(用 rootView.findViewById)
textView = rootView.findViewById(R.id.autoCompleteTextView1);
// ...
// 3. 返回根視圖
return rootView;
}
// 若需在 onCreate 中初始化非 View 邏輯
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 這裡不能操作 View
}
| Activity | Fragment |
|---|---|
setContentView() 在 onCreate | inflater.inflate() 在 onCreateView |
findViewById() | rootView.findViewById() |
| 單一佈局 | 可動態決定返回哪個佈局 |
private FragmentGoogleBinding binding;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = FragmentGoogleBinding.inflate(inflater, container, false);
// binding.textView...
return binding.getRoot();
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null; // 避免記憶體洩漏
}