【问题标题】:Is it possible to show an alert in specified activity of android App是否可以在 android App 的指定活动中显示警报
【发布时间】:2014-02-19 10:15:10
【问题描述】:

我正在尝试构建一个 SDK,它必须在任何给定活动上显示警报消息,而无需在该特定活动中添加任何额外代码。

示例:如果我们有一个有 10 个页面的 android 应用,并且如果我们说我们需要通过简单地添加在 Main Activity 调用的 SDK 来在 page6(带有名称的活动)上显示警报。

有可能吗?如果不在每个活动中添加代码,我们如何做到这一点?

更新:基本上想要识别应用程序中的活动数量并在任何给定活动上显示警报消息,而无需在活动中添加单行代码,但我们可以在 MainActivity 中添加代码。

【问题讨论】:

  • 创建一个实用程序类。在此类中创建显示警报的方法。
  • 下面是简单的代码,你可以在任何地方使用它。

标签: android sdk android-activity


【解决方案1】:

按照步骤进行

1) 创建Utility.java

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;


public class Utility {
    public interface AlertNeutral {

        public abstract void NeutralMathod(DialogInterface dialog, int id);

    }

    public static void showAlert(final Context mContext, final String title, final String msg, final String buttonCaption, final boolean isCancelable, final AlertNeutral target) {
        try {

            ((Activity) mContext).runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

                    int imageResource = android.R.drawable.stat_sys_warning;
                    Drawable image = mContext.getResources().getDrawable(imageResource);

                    builder.setTitle(title).setMessage(msg).setIcon(image).setCancelable(false).setNeutralButton(buttonCaption, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            target.NeutralMathod(dialog, id);
                        }
                    });

                    AlertDialog alert = builder.create();
                    alert.setCancelable(isCancelable);
                    alert.show();
                }
            });
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}

2) 从任何你想要的活动中调用上述函数。

import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;

import com.example.demo.Utility.AlertNeutral;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Utility.showAlert(this,"Demo Alert Title", "Demo Alert Message", "Demo Button Ok", true, new AlertNeutral() {

            @Override
            public void NeutralMathod(DialogInterface dialog, int id) {

            }
        });
    }


}

【讨论】:

  • 这不是预期的,您的解决方案要求开发人员更改我们想要显示警报的所有活动。想法是,如果您在问题中看到我的示例,我们想要显示警报在第 6 次活动中,无需在第 6 次活动中添加单行代码(但您可以在 MainActivity 中添加代码)。
【解决方案2】:

您可以上课并在那里创建警报消息,然后随时调用它。我想当您说警报时,您的意思是警报对话框。

AlertDialog alertDialog;

public CustomAlertDialog(Activity activity) {
        this.activity = activity;
        buildDialog();
    }
private void buildDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(activity).setView(popupView);
        alertDialog = builder.create();
            //here create your dialog
}

public void showDialog () {
        alertDialog.show();
    }

然后您所要做的就是启动CustomAlertDialog 并拨打showDialog 方法。如果你想以某种方式解除它,请执行dismissDialog 方法。

【讨论】:

    【解决方案3】:

    创建一个 BaseActivity

    public class BaseActivity extends Activity{
    
    public void showDialog() {
    
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                BaseActivity.this);
        // add extra parameters
    
        alertDialog.show();
    
    }
    }
    

    并使用 BaseActivity 扩展每个活动

    class your_activity extends BaseActivity{
    
     // here you can use showDialog
    
    }
    

    【讨论】:

    • 这不是预期的,您的解决方案要求开发人员更改我们想要显示警报的所有活动。作为 SDK 分销商,我不想要求开发人员更改他们的所有从 BaseActivity 扩展的活动。这个想法是,在 MainActivity 中应该有一行调用。
    【解决方案4】:
    public class Alert {
    
    public static void showAlert(Context context, String title, String message) {
    
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setPositiveButton("OK", null);
    
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
    
    }
    

    【讨论】:

    • 您可以通过传递标题和消息来从每个活动中调用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2017-08-21
    • 2011-06-04
    相关资源
    最近更新 更多