Mam fragment okna dialogowego. Mam zamiar wykorzystać ten fragment w aktywności i dialogu. I przesłonię metodę onCreateDialog i onCreateView. tutaj jest kodowanie.Wyjątek AndroidRuntimeException: funkcja requestFeature() musi zostać wywołana przed dodaniem zawartości
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.interval_time_popup, null);
setup(view, false);
return view;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View view = getActivity().getLayoutInflater().inflate(R.layout.interval_time_popup, null);
builder.setTitle("Interval Time");
builder.setView(view);
setup(view, true);
builder.setPositiveButton("Set", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
listener.setOnIntervalTime(hourNp.getValue(), minNp.getValue());
dismiss();
}
});
builder.setNegativeButton("Cancel", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
return builder.create();
}
Używam tego fragmentu w klasie aktywności w ten sposób.
SelectTimeIntervalDialogFragment fragment = new SelectTimeIntervalDialogFragment();
fragment.setHrMin(hr, min);
Bundle args = new Bundle();
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.shift_period_interval_layout, fragment);
t.commit();
Dzwonię z innej działalności podobnej do tej.
if((getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_NORMAL) ==
Configuration.SCREENLAYOUT_SIZE_NORMAL){
Intent intent = new Intent(ShiftPeriodActivity.this, SelectIntervalActivity.class);
intent.putExtra("intervalHr", speriod.intervalHr);
intent.putExtra("intervalMin", speriod.intervalMin);
startActivityForResult(intent, 1);
} else {
FragmentManager fm = getSupportFragmentManager();
intervalDialog = new SelectTimeIntervalDialogFragment();
intervalDialog.setHrMin(speriod.intervalHr, speriod.intervalMin);
intervalDialog.show(fm, "interval_fragment");
}
Mam dwa warunki. Gdy rozmiar ekranu jest normalny, wywołuje on aktywność, która zawiera dialog fragmentu. W przeciwnym razie wywoła okno dialogowe. Dostałem wyjątek, kiedy wywołuje okno podręczne. Powiedział requestFeature() must be called before adding content
. Czy mogę używać w ten sposób? Chciałbym wiedzieć, jak sobie z tym poradzić.
Dzięki.
powinieneś się nazywać first requestFeature przed setcontentView() –
Czy twój problem rozwiązany? – Subburaj
Prawdopodobnie 'setup()' wywołuje 'requestFeature()' - wywołujesz 'setup()' zarówno w 'onCreateView()' jak i 'onCreateDialog()'. (Wiem, stare pytanie, ale pojawiły się w kolejkach opinii.) – laalto