DialogFragment
を入れたいFrameLayout
コンテナを持つカスタムFragment
がありますが、そのビューは常にnull
を返します。どうすればよいですか?
DialogCreateAccount.Java
public class DialogCreateAccount extends DialogGeneral implements OnClickListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// TODO Auto-generated method stub
Dialog dialog = super.onCreateDialog(savedInstanceState);
//........
return dialog;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Fragment fragment = CreateAccountFragment.newInstance();
FragmentTransaction ft = getFragmentManager().beginTransaction();
if(fragment.getView()!=null){ // return always null
ft.add(
getFrameContainer().getId(),
fragment
)
.commit();
}else{
}
Log.i("DialogCreateAccount", "fragment:" +fragment.getView());// return null
}
CreateAccountFragment.Javaで
public class CreateAccountFragment extends Fragment implements OnClickListener{
public CreateAccountFragment() {
// TODO Auto-generated constructor stub
}
public static CreateAccountFragment newInstance() {
CreateAccountFragment f = new CreateAccountFragment();
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("CreateAccountFragment", "onCreate");
//onCreate is called
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
Log.i("CreateAccountFragment", "onCreateView");
//onCreateView not called
mRootView = inflater.inflate(R.layout.dialog_create_an_account, container, false);
return mRootView;
}
}
フラグメントでは、onCreate
が呼び出され、onCreateView
は呼び出されません。
フラグメントgetView()
は、フラグメントのライフサイクルでonCreateView()
が実行された場合にのみ、null以外のビューを返します。
フラグメントオブジェクトをインスタンス化するだけでは、そのライフサイクルコールバックは呼び出されません。これらは、後でフラグメントトランザクションが実行されるときに呼び出されます。
getView()
がnull以外を返すかどうかを条件付きでチェックせずに、フラグメントをコンテナに入れるだけです。
フラグメントはビューに関連付けられている必要があります。これは、xmlレイアウトで実行することもプログラムで実行することもできます。
フラグメントのドキュメント のセクション「アクティビティへのフラグメントの追加」を参照してください。