一个android程序由多个activity组成,如果来了一个网络消息,需要弹出对话框,或者taost事件之类的事情,该如何处理这种情况呢?

解决方案 »

  1.   

    在每个Activity中都做监听,好像能解决问题
      

  2.   

    每个Activity中都做监听,是能解决问题,但不实际!
    希望有很好的办法
      

  3.   

    我问的是 监听之后的事情,就是得到了这种事件通知,如何在当前页面响应事件,
    这里 不知道当前是哪个页面?也许程序目前正在后台运行,因为程序是多个activity的!
      

  4.   

    即使在后台运行,也可以在service中弹出toast,显示在用户界面的最上层。
      

  5.   

    service中弹出toast?要弹出对话框咋办?
      

  6.   

    这显然要起service了。不能用activity
    service可以做的。
      

  7.   

    实现onCreateDialog方法,是Activity内的
    然后你在AndroidManifest里面就把所有的Activity的
    <intentfilter>
       <action name="这里设置成为你监听系统事件的字段,你把系统的action放这里就可以"/>
    </intentfileter>
      

  8.   

    楼主可以用继承的方式,先写一个父类,里面实现对事件的监听,让后要实现该监听的Activity都继承自该类,这样应该是可以解决问题的,可以试一下
      

  9.   

    这么做还不是在所有Activity里响应 所有的事件嘛!
      

  10.   

    在实际的项目中一般都会写一个parentActivity类,所有的Activity类都继承这个父类,
    parentActivity用来处理所有Activity公共的事件,
    比如像你这种情况可以,在parentActivity中写一个监听,在parentActivity中处理监听到的结果就好了。
      

  11.   

    首先,一个程序中有很多activity本身就是不合理的,但是又要实现LZ的效果,通过发送广播消息然后在service中监听是最好的办法
      

  12.   

    好吧,17楼,你的程序都在一个activity里做的,那没话说了!
      

  13.   

    另外,监听在不在service里 并不是问题的根本,我的问题是如何在任意当前弹出对话框
    比如做个页面管理器,知道哪个页面是当前页面,当有事件出发弹出对话框时,不在其他页面弹出,而在这个管理器提供的当前页面给弹出来,这是我们现在的做法!不知道你们的项目有没有更好的方式!
      

  14.   


    我也不是很明白,到底有多个Activiy哪里是不合理的,都是不能复用的页面如何组织,比如九宫格,各个不同的功能,为什么不能有多个Activiy?我目前的使用的方法也是继承自一个Activiy,但是在生成Dialog时,传递了当前的Context,我倒是没有考虑过是否其他所有的子Activiy都会受影响的问题···
      

  15.   


    这个方法可以的,我就是这么实现的,和楼主的类似我就是做了个提醒功能,在指定时间提醒。
    在service中监听,到时间后发送广播,然后广播会弹出你想要弹出的activity页面
      

  16.   

    弹出对话框貌似之能是当前activity有效吧?不知道楼主在什么情况下需要在其他休眠的activity下弹出呢?如果真的有需要那么我想可以另外做一个消息队列,每个消息都和相应的activity对应上,等到切换activity的时候,检查消息队列,如果有对应的弹出提示框的消息,那就处理并且弹出提示框,然后消息移除队列(之前用J2ME实现过类似的功能,不过貌似用的不是很多啊,一般不在最上层的相关屏幕的消息,我都是直接丢弃的)最后打个招呼,雷神大哥,好久不见了,哈哈
      

  17.   

    服了, 不是弹出对话框的问题,也不是监听的问题,是这些都知道的情况下,如何得知哪个activity是当前或者是我做的软件的当前页面,才能将这个对话框弹出来,也可以理解成 一个软件有多个页面,但要弹出一个被动触发的对话框(这个触发看管可以不关心,关心下面要做的事情),弹出对话框需要一个activity 也可以理解为这个对话框要在哪个activity上SHOW出来,所以要知道 当前activity的引用!
    有过android大型软件开发经验的人一定会有这种需求!
      

  18.   

    刚接触Android不久,看了之后还是有些收获的,哈哈
      

  19.   

    看下这种方案是否可行啊, 为每个activity定义一个boolean变量,在每个activity的onresume和onpause方法中都相应改变该变量值,如onresume之后改为true,onpause里改为false,这样根据这些变量不就知道当前页面时哪个了。不知道可不可以哦……
      

  20.   

    Window android.app.Activity.getWindow()Retrieve the current android.view.Window for the activity. This can be used to directly access parts of the Window API that are not available through Activity/Screen.Returns:
        Window The current window, or null if the activity is not visual.我感觉这个函数应该对楼主有帮助。哈哈
      

  21.   


    能否解释下为什么一个程序中有很多activity本身就是不合理的?初学者,不太明白
      

  22.   

    直接写个继承自  Dialog. AlertDialog要显示哪个,就在哪个里面调用
      

  23.   

    activityManager.getRunningTasks(100);获取正在运行的任务,然后RunningTaskInfo.topActivity获取各任务当前的顶级Activity部件名称,可能会有多个应用(也就是多个任务),但是可以获取到各应用当前的窗口部件名称
      

  24.   

    额好
    StringBuffer sInfo = new StringBuffer();
    final ActivityManager activityManager = (ActivityManager) context
    .getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = activityManager.getRunningTasks(100); Iterator<RunningTaskInfo> l = tasks.iterator();
    while (l.hasNext()) {
    RunningTaskInfo ti = (RunningTaskInfo) l.next();
    sInfo.append("id: ").append(ti.topActivity);
    }
      

  25.   

    用Service启动Activity的方法不可行么。只要实现一个Dialog样子的Acitivty
      

  26.   

    不知道楼主要弹出的DIALOG和当前页面有什么关系?
      

  27.   

    ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
    ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
      

  28.   


    这个是 获取自己程序的最顶层Activity?
      

  29.   

    其实我有一种不知道算不算解决办法的办法,就是自己写个Activity,里面放个TextView,用来显示提示的消息,只是在AndroidManifest.xml里面注册这个Activity的时候限定一下它的样式android:theme=”@android:style/Theme.Dialog”,这样这个Activity就会像AlertDialog一样弹出来的。这样就不管当前在哪个Activity都无所谓了,不知道能不能满足你的需求...
      

  30.   

    用system alert window 的方法,监听之后扔到system alert window 中去显示,system alert window 是可以脱离activity 的。
      

  31.   


    这个可能不行,因为你虽然弹出来了,可与原来的程序基本没关系,比如用户点击了返回,那你只能把自己finish(),可是无法回到自己的程序中!
      

  32.   

    Toash  可以用service直接弹。
    其它样式,可以让每个 Activity 都继承一个 BaseActivity。
    BaseActivity 监听了“新通知”的广播,收到广播时,判断对话框是否已经显示,如果没有显示,则AlterDialog,或者 startActivity一个Dialog样式的Activity。
      

  33.   

    新建一个acitvity,
    你在AndroidManifest里面
    <activity android:name=”.DialogActivity” android:label=”@string/activity_dialog” android:theme=”@android:style/Theme.Dialog”>
    <intentfilter>
      <action name="这里设置成为你监听系统事件的字段,你把系统的action放这里就可以"/>
    </intentfileter>
    </activity>
     即监听到某个事件以后就起这个activity,里面可以放任何东西
      

  34.   

    android中有一个对话框的框架,我在英文文献中看到,对话框可以重用,搞清楚了很方便,可以试一下
      

  35.   

    弹出对话框后点返回把对话框关闭后,难道不就是回到用户最后看到的页面吗?
    或者说……
    楼主你是不是这个意思,你假定弹出对话框的时候你的程序没有在前台运行?然后弹出对话框后点返回就返回到了之前你程序最后运行的那个activity?
      

  36.   

    可以用个静态类的变量来保持当前的页面,可以保持activity的class,每当一个activity resume的时候,就去覆盖这个变量,那这个变量就始终是最后一次打开的页面,然后建个receiver来监听事件,当事件来的时候,就通过变量获取到页面就行了,不知道这样行不行。
      

  37.   

    声明个全局的 static activity  每次进一个activity 就将其赋给她(onresume方法)。从网络获取数据后,当前显示的activity你都有了,你想怎么干就怎么干。
      

  38.   


    起始这个功能 应 狗哥给提供,就是返回 自己的程序的最后一个页面,这个应该是个历史链,只是目前看 狗哥没有这样的功能,那么就是需要我们自己实现了!这个帖子之前是结贴了,原因就是 我们开发的时候自己做 的历史链,这样才能只知道 这个弹出的对话框的上一个页面是啥,但自己实现总是有些别扭,所以再次关注是否有更好的办法,或者某天 android的X.Y版 提供了这样一个方法!
      

  39.   

    整理一下,假设我理解没错,楼主是要达到以下的需求:
    1.App前台运行,此时弹出AlertDialog后返回当前Activity当然没问题.一个点击关闭直接OK.
    2.App后台运行,此时弹出AlertDialog(怎么样弹出不管,前面已经有解决方案),此时如何返回用户App最后显示的那个Activity.
    针对楼主这种需求,最好的方法就是声明一个静态全局变量来保存用户切换窗口时的Activity了.
    楼上已经提到,不过实现起来还是有点问题的.
    可以换种思路来说,怎么样的动作会使得App从前台转换到后台呢?
    其实只要在楼主App的特定入口处(前台--->后台)为Activity全局变量赋值就可以了.典型的情况就是当用户按下Home按键返回桌面时,调用已经重写过的父类Activity的onPause()方法.
      

  40.   

    好吧,17楼,你的程序都在一个activity里做的,那没话说了!
      

  41.   

    <a href="http://www.baidu.com">百度</a>[
      

  42.   

    taost 的话让第一个参数为Context.getApplication();就可以全局弹出了
      

  43.   

    没这么复杂吧?用taost自定义ui不就可以了吗?
      

  44.   


    TAOST是有要求的,比如必须需要一个有界面的上下文,如果没有那就崩溃了!
      

  45.   

    程序如果在后台的时候,最好别弹出信息影响用户的使用。没做过android应用,但是有个想法:1. 按照前面几位说的,消息通知的处理仍然由父类来做,调用同一个处理函数。所有的子Activity都能处理这个通知。2. 该通知的处理函数中,判断当前Activity是否处于top(focus & active?)状态, 如果是,则弹出toast,否则do nothing.
       如果同一时间只可能有一个top的话,那么只会有一个子activity来弹出toast。不知道可不可行,请教下大家。