我想使用DialogFragment
顯示自定義對話框。但是,在我需要修改它們之前,我無法初始化佈局視圖。未調用DialogFragment的onCreate()回調(在哪裏初始化視圖?)
這是我的DialogFragment
類。
public class RemoteProgressDialog extends DialogFragment {
private TextView lockProgress;
private TextView foldProgress;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Holo_Dialog_NoActionBar);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.remote_progress_dialog, null);
lockProgress = (TextView) view.findViewById(R.id.lock_progress);
return view;
}
public void lockFinished() {
lockProgress.setCompoundDrawables(
null,
getResources().getDrawable(R.drawable.icn_mycar_sunroof_open),
null, null);
// TODO: remove
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
showLockProgress(false);
dismissDialogIfNeeded();
}
public void showLockProgress(boolean show) {
lockProgress.setVisibility(show ? View.VISIBLE : View.GONE);
}
private void dismissDialogIfNeeded() {
if (lockProgress.getVisibility() == View.GONE) {
// TODO: add conditions
dismiss();
}
}
我顯示了在Fragment
像這樣的對話:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
progressDialog = new RemoteProgressDialog();
}
@Override
public boolean onLongClick(View v) {
progressDialog.show(getFragmentManager(), REMOTE_PROGRESS_DIALOG);
progressDialog.showLockProgress(true);
return true;
}
起初,我嘗試使用AlertDialog.Builder
建立對話,但我是越來越NullPointerException
因爲之前showLockProgress()
所以lockProgress
沒有進行onCreateDialog()
方法是空值。好吧,我不需要AlertDialog
,所以我最終使用這種方法希望它能幫助解決問題。
不幸的是,它沒有幫助。當調用方法showLockProgress()
時,lockProgress
仍然爲空。我在和onCreateView()
方法的DialogFragment
以及onAttach()
的主機Fragment
中放置了一個斷點。 onAttach()
中的那個被觸發,因此應創建DialogFragment
的實例,但似乎不會調用onCreate()
和onCreateView()
。當我長按按鈕時,showLockProgress()
被調用,但lockProgress
仍爲空。
爲什麼在創建對話框實例時或在我調用DialogFragment.show()
方法後立即初始化視圖?