मैंने होम स्क्रीन पर प्रदर्शित करने के लिए यह सरल संवाद खंड बनाया है, जो ठीक काम करता है, सिवाय इसके कि जब मैं खंड संवाद को खारिज करता हूं, तो संवाद शब्द के साथ एक दूसरा छोटा बॉक्स दिखाई देता है। मैं अपने जीवन के लिए यह नहीं समझ सकता कि यह कहाँ से आ रहा है।

किसी के पास कोई सुझाव है? क्या यह कक्षाओं की श्रृंखला के साथ कुछ करने के लिए हो सकता है और उनमें से एक फिर से अलर्ट लॉन्च कर रहा है लेकिन कस्टम लेआउट व्यू के बिना?

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


}

}

मेनिफेस्ट.एक्सएमएल

<?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
sean le roy 16 जिंदा 2017, 02:49

1 उत्तर

सबसे बढ़िया उत्तर

यह AlarmDialogClass Activity है। भले ही आप setContentView() को कॉल न करें, फिर भी इसकी विंडो बनी हुई है, और Theme.Dialog के साथ, यह ऐसा दिखाई देगा।

जैसे ही DialogFragment को खारिज कर दिया जाता है, Activity को समाप्त करने से यह ठीक हो जाएगा, हालांकि यह थोड़ा बोझिल है, और आप Activity को जाने से पहले एक सेकंड के लिए देख सकते हैं। इसके बजाय आप Activity के लिए NoDisplay थीम का उपयोग कर सकते हैं, लेकिन DialogFragment के खारिज होने के बाद भी आपको Activity को खत्म करना होगा।

केवल Activity को अपने संवाद के रूप में उपयोग करना और DialogFragment को छोड़ना शायद आसान है।

1
Mike M. 16 जिंदा 2017, 03:18