2017-01-15 5 views
1

この単純なダイアログフラグメントをホーム画面に表示するようにしましたが、これはフラグメントダイアログを閉じるときを除き、もう1つの小さなボックスにDialogue inそれ。私の人生はどこから来ているのか分からない。Android - ダイアログフラグメントを閉じた後に小さなダイアログボックスが表示される

誰もが何か提案がありますか?クラスの連鎖が呼び出されていることと関係があり、そのうちの1人がアラートを再起動していますが、カスタムレイアウトビューは表示されませんでしたか?

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

} 

ダイアログレシーバクラスです。

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と表示されます。

DialogFragmentが解雇されるとすぐにActivityを終了しますが、それは少し面倒ですが、それが行く前にまだActivityが表示されることがあります。代わりにActivityNoDisplayテーマを使用できますが、DialogFragmentを解約した後でも、Activityの処理を完了する必要があります。

Activity自体をダイアログとして使用して、DialogFragmentを削除する方が簡単でしょう。

関連する問題