2017-01-15 2 views
1

Ich habe dieses einfache Dialogfeldfragment über den Startbildschirm angezeigt, was gut funktioniert, außer wenn ich den Fragmentdialog ableite, erscheint ein zweites Kästchen mit dem Wort Dialogue in es. Ich kann nicht für das Leben von mir herausfinden, woher es kommt.Android - Nach dem Schließen eines Dialogfeldfragments erscheint ein kleines Dialogfeld

Hat jemand irgendwelche Vorschläge? Könnte es etwas mit der Kette von Klassen zu tun haben, die aufgerufen werden, und dass einer von ihnen die Warnung erneut startet, aber ohne die benutzerdefinierte Layoutansicht?

enter image description here

Das Dialog Fragment.

public class DialogFragmentTest extends DialogFragment implements View.OnClickListener{ 

private AlertDialog.Builder mBuilder; 
private AlertDialog mAlertDialog; 
private View mDialogView; 
private Button mOkBtn, mCancelBtn; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    mDialogView = inflater.inflate(R.layout.dialog_layout, container, false); 

    Log.d("DialogFrag", "onCreate"); 

    // mBuilder = new AlertDialog.Builder(getContext()); 

    mOkBtn = (Button) mDialogView.findViewById(R.id.ok); 
    mCancelBtn = (Button) mDialogView.findViewById(R.id.cancel); 

    mOkBtn.setOnClickListener(this); 
    mCancelBtn.setOnClickListener(this); 

    return mDialogView; 
} 


@Override 
public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.ok: 

      this.dismiss(); 

      break; 
     case R.id.cancel: 
      this.dismiss(); 
      break; 
    } 
} 

} 

Dialog Empfänger Klasse.

public class AlertDialogReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Intent alarmIntent = new Intent("android.intent.action.MAIN"); 
    alarmIntent.setClass(context, AlarmDialogClass.class); 
    alarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(alarmIntent); 
} 
} 

Die Klasse, die das Fragment instanziiert.

public class AlarmDialogClass extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Log.d("AlarmClass", "onCreate:"); 

    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    DialogFragmentTest dft = new DialogFragmentTest(); 
    dft.show(fm, "Sample Fragment"); 


} 

}

manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="com.android.shnellers.dialogue" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".AlarmDialogClass" 
     android:theme="@android:style/Theme.Dialog" 
     android:launchMode="singleInstance" /> 

    <receiver android:process=":remote" android:name=".AlertDialogReceiver"/> 
</application> 

Antwort

1

Es ist die AlarmDialogClassActivity. Auch wenn Sie nicht setContentView() anrufen, wird sein Fenster immer noch erstellt, und mit der Theme.Dialog, so wird es aussehen.

die Activity Beenden, sobald die DialogFragment der es dauern würde, wird zurückgewiesen Pflege, obwohl das ein wenig unhandlich ist, und Sie können immer noch die Activity für einen Bruchteil einer Sekunde, bevor es geht sehen. Sie könnten stattdessen ein NoDisplay Thema für die Activity verwenden, aber Sie würden immer noch die Activity beenden müssen, nachdem die DialogFragment entlassen wird.

Es ist wahrscheinlich einfacher, einfach die Activity selbst als Ihren Dialog zu verwenden und die DialogFragment zu löschen.

Verwandte Themen