2013-03-01 14 views
6

Builder'ı kullanarak ve özel bir görünüm ayarlayarak bir AlertDialog oluşturmaya çalışıyorum.Bir DialogFragment içinde bir AlertDialog için özel düzenini şişirmeye çalışırken StackOverflowError

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle(R.string.enter_time); 

    LinearLayout outerLayout = (LinearLayout) getLayoutInflater(savedInstanceState) 
      .inflate(R.layout.time_entry_dialog, null); 
    ... 
} 

Ve burada LogCat çıktı: Ben onCreateDialog iç görünümünü şişirmek için denediğimde, StackOverflowError .. İşte

o onCreateDialog geri döndüğü noktaya kadar kodudur olsun:

02-28 22:30:04.220: E/AndroidRuntime(4250): FATAL EXCEPTION: main 
02-28 22:30:04.220: E/AndroidRuntime(4250): java.lang.StackOverflowError 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.app.Activity.getSystemService(Activity.java:4009) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.view.LayoutInflater.from(LayoutInflater.java:210) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:75) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:812) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.app.AlertDialog$Builder.<init>(AlertDialog.java:374) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at com.sweatyreptile.chee.runtimetracker.TimeEntryDialogFragment.onCreateDialog(TimeEntryDialogFragment.java:18) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at com.sweatyreptile.chee.runtimetracker.TimeEntryDialogFragment.onCreateDialog(TimeEntryDialogFragment.java:21) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at com.sweatyreptile.chee.runtimetracker.TimeEntryDialogFragment.onCreateDialog(TimeEntryDialogFragment.java:21) 
02-28 22:30:04.220: E/AndroidRuntime(4250):  at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295) 
...etc 

DÜZENLEME:

mDialog = onCreateDialog(savedInstanceState); 
:
Ben DialogFragment.getLayoutInflater() kaynağında bu çizgiyi bulundu

Öyleyse, sonsuz yinelemeye neden olmadan onCreateDialog'un içinde bir LayoutInflator alamıyorsam, özel bir AlertDialog için görünümü nasıl şişiririm? Sorun bulunduğunda

+0

Time_entry_dialog'da neye sahipsiniz? Ayrıca, stacktrace'i istisna ile göndermekten korkmayın. – Luksprog

+0

Lütfen Logcat çıkışınızı ekleyin –

+0

LogCat çıkışını ekledim. @Luksprog, 'time_entry_dialog' sadece merkezlenmiş yer çekimi olan bir LinearLayout'tur –

cevap

12

. DialogFragment.getLayoutInflater(), onCreateDialog() numaralı bir aramayı içerir, böylece getLayoutInflater() içinden onCreateDialog()'u arayarak sonsuz bir döngü oluşturur.

Bu yanıtında çözüm bulundu: Ben gerçekten gibi görünmüyor çünkü bu iyi formu, eğer tam olarak emin değilim https://stackoverflow.com/a/10585164/2020340

ama birlikte

getLayoutInflater(savedInstanceState) 

yerini

getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
+1

Nice! Benim günümü kurtardı –

+0

Ve benim! Teşekkürler. –

+1

Bu bir Android hatası mı? Ben de bu problemi yaşadım ve getLayoutInflater'ın içindenCreateDialog'u çağırmak mantıklı değil mi? – medonja

İlgili konular