Android - 关闭对话框片段后出现小对话框
Android - Little dialog box appears after closing a dialog fragment
我制作了这个简单的对话框片段以显示在主屏幕上,它工作正常,除非当我关闭片段对话框时,会出现第二个小框,其中包含“对话”一词。我这辈子都想不出它是从哪里来的。
有人有什么建议吗?是否与正在调用的 classes 链有关,并且其中一个正在再次启动警报但没有自定义布局视图?
对话框片段。
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;
}
}
}
对话接收器class。
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);
}
}
实例化片段的class。
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>
这是 AlarmDialogClass
Activity
。即使您不调用 setContentView()
,它的 window 仍然会被创建,并且使用 Theme.Dialog
,这就是它的样子。
在 DialogFragment
被关闭后立即完成 Activity
会处理它,尽管这有点笨拙,你可能仍然会在一瞬间看到 Activity
在它消失之前。您可以为 Activity
使用 NoDisplay
主题,但在 DialogFragment
被关闭后,您仍然需要完成 Activity
。
仅使用 Activity
本身作为对话框可能更容易,并删除 DialogFragment
。
我制作了这个简单的对话框片段以显示在主屏幕上,它工作正常,除非当我关闭片段对话框时,会出现第二个小框,其中包含“对话”一词。我这辈子都想不出它是从哪里来的。
有人有什么建议吗?是否与正在调用的 classes 链有关,并且其中一个正在再次启动警报但没有自定义布局视图?
对话框片段。
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;
}
}
}
对话接收器class。
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);
}
}
实例化片段的class。
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>
这是 AlarmDialogClass
Activity
。即使您不调用 setContentView()
,它的 window 仍然会被创建,并且使用 Theme.Dialog
,这就是它的样子。
在 DialogFragment
被关闭后立即完成 Activity
会处理它,尽管这有点笨拙,你可能仍然会在一瞬间看到 Activity
在它消失之前。您可以为 Activity
使用 NoDisplay
主题,但在 DialogFragment
被关闭后,您仍然需要完成 Activity
。
仅使用 Activity
本身作为对话框可能更容易,并删除 DialogFragment
。