如何在另一个活动中填充布局对话框?

3

我现在位于SecondActivity.class。在我的代码中,当我进行返回操作时,我想让对话框出现在我的MainActivity.class上。

这是我在膨胀对话框布局上的代码。

这会出现在SecondActivity.class而不是我的主要活动上。

 View dialog = LayoutInflater.from(this).inflate(R.layout.dialog_fmcg_popup, null);
                                    TextView tvfmcg2 = dialog.findViewById(R.id.tv_fmcg2);
                                    tvfmcg2.setText(message);
                                    swipeDismissDialog = new SwipeDismissDialog.Builder(this)
                                            .setView(dialog)
                                            .setOnSwipeDismissListener(new OnSwipeDismissListener() {
                                                @Override
                                                public void onSwipeDismiss(View view, SwipeDismissDirection direction) {
                                                    Preferences.setString(Prefkey.last_qualified_fmcg_voucher_on_remove, message);
                                                }
                                            })
                                            .setFlingVelocity(0)
                                            .setOverlayColor(0)
                                            .build()
                                            .show();
3个回答

2

您可以使用ActivityForResult()方法。

您需要以与当前不同的方式启动活动。

startActivityForResult(new Intent(this, SecondActivity.class), 80);

然后在你的SecondActivity.class中,你需要重写onBackPressed()方法,如下所示:

 @Override
    public void onBackPressed() {
        setResult(Activity.RESULT_OK,new Intent());
        finish();
    }

在您的FirstActivity.class中,您需要重写onActivityResult()方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 80) {
        if(resultCode == Activity.RESULT_OK){
            View dialog = LayoutInflater.from(this).inflate(R.layout.dialog_fmcg_popup, null);
        TextView tvfmcg2 = dialog.findViewById(R.id.tv_fmcg2);
        tvfmcg2.setText(message);
        swipeDismissDialog = new SwipeDismissDialog.Builder(this)
            .setView(dialog)
            .setOnSwipeDismissListener(new OnSwipeDismissListener()
            {
                @Override
                public void onSwipeDismiss(View view, SwipeDismissDirection direction)
                {
                    Preferences.setString(Prefkey.last_qualified_fmcg_voucher_on_remove, message);
                }
            })
            .setFlingVelocity(0)
            .setOverlayColor(0)
            .build()
            .show();
        }
    }
}

0
尝试在MainActivityonStartonResume中调用显示对话框的方法。

当用户启动应用程序时,onStart将触发。 - Ashish
1
不,这完全是错误的!如果她在MainActivity上,然后将应用程序放到后台,然后再次打开它,它将显示对话框,因为它将触发onResume方法。 - Skizo-ozᴉʞS ツ

0

如果您想在MainActivity上显示它,而不是在SecondActivity上显示,您必须像这样启动SecondActivity:

startActivityForResult(yourIntent, SECOND_ACTIVITY_KEY)

在BackPresses中,您可以像这样设置结果。
Intent intent=Intent()
intent.putExtra("MESSAGE",message)
setResult(2,intent)

然后在MainActivity中,您可以监听结果并调用对话框。

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    // Check which request we're responding to
    if (requestCode == SECOND_ACTIVITY_KEY) {
        // Make sure the request was successful
        if (resultCode == Activity.RESULT_OK) {
            // The user picked a contact.
            // The Intent's data Uri identifies which contact was selected.

            // Do something with the contact here (bigger example below)
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接