8

Ich habe Dialog Fragment. Ich habe vor, dieses Fragment in Aktivität und Dialog zu verwenden. Und ich überschreibe OnCreateDialog und OnCreateView-Methode. hier ist Codierung.AndroidRuntimeException: requestFeature() muss vor dem Hinzufügen von Inhalt aufgerufen werden

@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(); 
    } 

Ich verwende dieses Fragment in der Aktivitätsklasse so.

  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(); 

Ich nenne es von einer anderen Aktivität so.

  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"); 
        } 

Ich habe zwei Bedingungen. Wenn die Bildschirmgröße normal ist, ruft sie Aktivität auf, die den Fragmentdialog enthält. Andernfalls rufen Sie den Popup-Dialog auf. Ich habe die Ausnahme, wenn es den Popup-Dialog aufruft. Es sagte requestFeature() must be called before adding content. Kann ich so verwenden? Ich würde gerne wissen, wie ich das überwinden kann.

Danke.

+0

sollten Sie zuerst requestFeature vor dem setcontentView() aufgerufen werden –

+0

Ob Ihr Problem gelöst ?? – Subburaj

+2

Wahrscheinlich 'setup()' ruft 'requestFeature()' auf - Sie rufen 'setup() 'sowohl in' onCreateView() 'als auch' onCreateDialog() 'auf. (Ich weiß, alte Frage kam aber in Überprüfung Warteschlangen.) – laalto

Antwort

-3

ich denke, Sie verwenden requestWindowFeature(); bei erstellen

verwenden Sie es vor setContentView (R.layout.activity);

+0

Ich habe die Ausnahme, wenn ich den Popup-Dialog aufrufen. – user1156041

15

Es scheint, Ihr Problem ist genau das gleiche wie meins - ähnlich ish-Code und die gleiche Ausnahme geworfen.

Die Lösung ist zu tun, was @laalto vorgeschlagen: Verwenden Sie entweder onCreateView() oder onCreateDialog(), aber nicht beide gleichzeitig. Ich weiß, dass die Ausnahme scheinbar durch viele verschiedene Dinge verursacht werden kann, aber das half mir in meinem Fall; hoffentlich hilft es jemand anderem in der Zukunft :)

+0

Was ist, wenn Sie beide Methoden benötigen? –

+0

Ich bin mir nicht sicher, ob das richtig ist: "Implementierungen sollten diese Klasse überschreiben und onCreateView (LayoutInflater, ViewGroup, Bundle) implementieren, um den Inhalt des Dialogs zu liefern. Alternativ können sie onCreateDialog (Bundle) überschreiben. um einen vollständig benutzerdefinierten Dialog, beispielsweise einen AlertDialog, mit eigenem Inhalt zu erstellen. " (von: http://developer.android.com/reference/android/app/DialogFragment.html). – JakeP

+1

Derselbe Link erwähnt auch: "Anstatt (oder zusätzlich) onCreateView (LayoutInflater, ViewGroup, Bundle) zu implementieren, um die Ansichtshierarchie innerhalb eines Dialogs zu generieren, können Sie onCreateDialog (Bundle) implementieren, um ein eigenes benutzerdefiniertes Dialogobjekt zu erstellen. " Aber das führt dazu, dass die gefürchtete "AndroidRuntimeException: requestFeature()" aufgerufen werden muss, bevor Inhalte hinzugefügt werden können. "Entweder sind die Dokumente oder die API fehlerhaft ... –