Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 显示从一个活动到另一个活动的警报_Android_Alert - Fatal编程技术网

Android 显示从一个活动到另一个活动的警报

Android 显示从一个活动到另一个活动的警报,android,alert,Android,Alert,我正在开发一个Android应用程序,我在后台每5秒调用一个活动上的Web服务,现在假设他们有2个活动 活动A 活动B 在活动A上,我每5秒收到一次web服务响应,当前我的控件在活动B上,现在我想通过保持对活动B的控制来显示活动A发出的警报 简言之,我想显示一些信息,这是在一个页面的背景来的页面,我现在所在的位置 我是android新手,请给我建议一些解决这个问题的方法 谢谢基本上你需要发布者-订阅者模式 检查链接这是我使用的最简单的发布订阅类, 其概念是,活动B订阅活动A,因此当活动A发生某

我正在开发一个Android应用程序,我在后台每5秒调用一个活动上的Web服务,现在假设他们有2个活动 活动A 活动B

在活动A上,我每5秒收到一次web服务响应,当前我的控件在活动B上,现在我想通过保持对活动B的控制来显示活动A发出的警报

简言之,我想显示一些信息,这是在一个页面的背景来的页面,我现在所在的位置

我是android新手,请给我建议一些解决这个问题的方法


谢谢

基本上你需要发布者-订阅者模式

检查链接这是我使用的最简单的发布订阅类, 其概念是,活动B订阅活动A,因此当活动A发生某些属性更改时,它将触发活动B收到的propertyChange,而未来的过程将由活动B完成


对于订阅活动A,活动B实现PropertyChangeListener,

我建议的一个解决方案是

创建一个名为callAlertBox.java的类,如下所示

public  class callAlertBox {

private static Activity activity ;

public static Activity getActivity() {
    return activity;
}

public static void setActivity(Activity mactivity) {
    activity = mactivity;
}


public static void showMyAlertBox(){
      AlertDialog ad = new AlertDialog.Builder(activity).create(); 
        ad.setCancelable(true); // This blocks the 'BACK' button if false
        ad.setMessage("Hello World"); 
        ad.show();
}
}
现在,在每个可能调用此警报框的活动中,将此代码放在其onResume()方法上

现在你可以打电话了

callAlertBox.showMyAlertBox();
从任何活动中,您都将获得警报框

编辑

MainActivity.java文件

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btn1 = (Button) findViewById(R.id.button1);
    btn1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent( MainActivity.this,Act1.class));
        }
    });

    Button btn2 = (Button) findViewById(R.id.button2);
    btn2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent( MainActivity.this,Act2.class));
        }
    });

    Button btn3 = (Button) findViewById(R.id.button3);
    btn3.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent( MainActivity.this,Act3.class));
        }
    });

    new CountDownTimer(365 * 24 * 60 * 60, 5000) {

     public void onTick(long millisUntilFinished) {
         callAlertBox.showMyAlertBox();
     }

     public void onFinish() {
        //Done 
     }
    }.start();



}

@Override
protected void onResume() {
    super.onResume();
     callAlertBox.setActivity(MainActivity.this);
}
}

现在你可以从这里看到,我的倒计时计时器将在后台调用该方法,从而使对话框独立于你所处的任何活动,在我的情况下,它是主要活动,在你的情况下,可能有一些经常调用的更新方法,对吗??如果您想在ActivityB中显示数据,只需使用该类调用该方法

,那么为什么要从ActivityA调用WS?ActivityB只是一个示例我有许多活动,但我可以在OneHanks中调用webservice以获得响应,但我如何确定哪个活动将调用showMyAlertBox(),因为我在一个活动上得到响应,而现在我在另一个活动上?我使用了一个来自主活动的计时器任务,它在后台调用该方法,等等,我也将使用该代码
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btn1 = (Button) findViewById(R.id.button1);
    btn1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent( MainActivity.this,Act1.class));
        }
    });

    Button btn2 = (Button) findViewById(R.id.button2);
    btn2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent( MainActivity.this,Act2.class));
        }
    });

    Button btn3 = (Button) findViewById(R.id.button3);
    btn3.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent( MainActivity.this,Act3.class));
        }
    });

    new CountDownTimer(365 * 24 * 60 * 60, 5000) {

     public void onTick(long millisUntilFinished) {
         callAlertBox.showMyAlertBox();
     }

     public void onFinish() {
        //Done 
     }
    }.start();



}

@Override
protected void onResume() {
    super.onResume();
     callAlertBox.setActivity(MainActivity.this);
}
}