DialogFragment.getDialog가 null을 반환합니다.
DialogFragment.getDialog ()를 사용하여 확장 된 DialogFragment로 만든 대화 상자를 가져 오려고하지만 null을 반환합니다.
기본적으로 DialogFragment를 만들고 표시하는 FragmentActivity에서 레이아웃의 텍스트를 변경하고 싶습니다.
getDialog()
DialogFragmen'ts 라이프 사이클에서 너무 일찍 전화하고 있습니다.
getDialog()
mDialog
DialogFragment에서 전용 변수 를 반환합니다 .
DialogFragment가 인스턴스화 될 때 mDialog
null의 경우, 때 그것은 세트를 가져옵니다 onCreateDialog
내부 해고 getLayoutInflater(Bundle savedInstanceState)
당신이 전화를해야하므로, getDialog
후 onCreateDialog
.
예를 들어,라는 몇 가지 일반적인 방법의 순서는 onCreate
, onCreateDialog
및 onCreateView
, onStart
. 그래서, 당신은 호출 할 수 있습니다 getDialog
그것은 뭔가를 반환 한 onCreateView
나 onStart
에 있지만 onCreate
나 onCreateDialog
.
Eventhough onStart
가 호출 called when the Fragment is visible to the user
되고 해당 지점에서 조각의 레이아웃을 조정하면 괜찮아 보입니다. 예를 들어 너비와 높이를 사용하여 설정 getDialog().getWindow().setLayout(..., ...);
하면 조각이 크기가 변경되는 것처럼 보이지 않지만 새로 설정된 크기가있는 것처럼 보입니다.
사용 가능한 FragmentManager에서 executePendingTransactions ()를 호출 해보십시오.
dialogFragment = new DialogFragment();
...
dialogFragment.show(mFragmentActivity.getSupportFragmentManager(), "Dialog");
mFragmentActivity.getSupportFragmentManager().executePendingTransactions();
Dialog d = dialogFragment.getDialog()
...
DialogFragment를 표시하는 두 가지 방법이 있습니다.
void showDialog() {
// Create the fragment and show it as a dialog.
DialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(getFragmentManager(), "dialog");
}
과
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = MyDialogFragment.newInstance();
ft.add(R.id.embedded, newFragment);
ft.commit();
첫 번째 방법을 사용할 때만 Null이 아닌 대화 상자를 가져올 수 있습니다.
public class Dialog extends DialogFragment {
private DialogListener dialogListener;
public void setDialogListener(DialogListener dialogListener) {
this.dialogListener = dialogListener;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.layout_dialog, null);
return view;
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (null != dialogListener) {
dialogListener.onDismiss();
}
}
public interface DialogListener {
void onDismiss();
}
}
활동 중 ...
Dialog dialog= new Dialog();
dialog.setDialogListener(new Dialog.DialogListener() {
@Override
public void onDismiss() {
Foo()..
}
});
One reason for why getDialog()
might return null
after the dialog has been constructed and properly stored in mDialog
is an accidental invocation of dismiss()
on the DialogFragment
.
When dismiss()
is called, it will reset the mDialog
field to null
so that subsequent invocations of getDialog()
will return null
instead of the previously constructed dialog.
In my case, dismiss()
was called to handle an error situation / side-case in the DialogFragment
's onActivityCreated()
method. Subsequently trying to use getDialog()
from the onResume()
method returned null
.
Also refer to the source code of the DialogFragment
class, specifically its dismissInternal(boolean allowStateLoss)
method:
ReferenceURL : https://stackoverflow.com/questions/8456143/dialogfragment-getdialog-returns-null
'development' 카테고리의 다른 글
Github Ahead / Behind Metrics의 의미 (0) | 2021.01.05 |
---|---|
MySQL의 문자열에서 알파벳이 아닌 모든 문자를 제거하는 방법은 무엇입니까? (0) | 2021.01.05 |
Eclipse가 SBT의 종속성을 인식하도록하는 방법 (0) | 2021.01.05 |
Resque 대기열의 작업 수를 프로그래밍 방식으로 가져옵니다. (0) | 2021.01.05 |
jQuery를 사용한 ASP.Net 2012 Unobtrusive Validation (0) | 2021.01.05 |