2017-01-15 1 views
1

Я сделал этот простой фрагмент диалога для отображения на главном экране, который отлично работает, за исключением случаев, когда я отключаю диалог фрагмента, появляется вторая маленькая коробка со словом Dialogue in Это. Я не могу для жизни меня фигурой, откуда она исходит.Android - после закрытия фрагмента диалогового окна появляется небольшое диалоговое окно

У кого-нибудь есть предложения? Может ли это быть чем-то связанным с цепочкой вызываемых классов и что один из них снова запускает оповещение, но без пользовательского вида макета?

enter image description here

Диалог фрагмент.

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 Receiver класс.

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

Класс, который создает экземпляр фрагмента.

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> 

ответ

1

Это AlarmDialogClassActivity. Даже если вы не вызываете setContentView(), его окно все еще создано, а с Theme.Dialog это будет выглядеть.

Завершение Activity как только DialogFragment уволен будет заботиться о нем, хотя это немного громоздким, и вы могли бы еще увидеть Activity за долю секунды до того, как идет. Вместо этого вы можете использовать тему NoDisplay для Activity, но вам все равно придется обрабатывать завершение Activity после того, как DialogFragment будет уволен.

Возможно, вам просто проще использовать Activity в качестве вашего диалогового окна, и оставьте DialogFragment.