0

我正在开发一个Android应用程序,并且我在一个活动上调用一个网络服务,在后台每5秒一次,现在假设他们是2个活动活动A活动B

在 Activity AI 上,每 5 秒获得一次 Web 服务响应,目前我控制在 Activity B 上,现在我想通过控制 B 上的活动来显示来自活动 A 的警报。

简而言之,我想在我现在所在的页面的一页上显示一些背景消息。

我是android新手,请建议我解决这个问题???

谢谢

4

2 回答 2

1

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

http://docs.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

检查链接它是我使用的最简单的发布订阅类,概念是,Activity B 订阅 Activity A,所以当 Activity A 有一些属性更改时,它会触发 Activity B 接收到的 propertyChange,并且未来的过程完成通过活动 B。

对于订阅Activity A,Activity B实现PropertyChangeListener,

于 2012-10-29T10:03:51.787 回答
0

一旦我提出的解决方案就是这个

像这样创建一个名为 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() 方法中

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

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

现在你可以打电话

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

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

于 2012-10-29T10:40:48.043 回答