android在任意界面弹出popwindow的两种方方法


方法一:创建一个基类,所有的activity都继承自这一个基类,在基类中注册广播接收者,收到弹出popwindow的广播后就弹出广播,需要注意的一点是,当前activity不可见
时是不需要弹出popwindow的,因此需要声明一个变量表示当前activity是否可见。

public
abstract
class
BaseActivity
extends
FragmentActivity
implements
OnClickListener {
protected boolean needPopOrderOver;//当前界面是否可见
@Override
protected void onCreate(Bundle
 savedInstanceState) { 
// TODO Auto-generated method
 stub
super.onCreate(savedInstanceState);
//注册广播
MyReceive myReceive
 = new
MyReceive();
IntentFilter
 filter = new
IntentFilter();
filter.addAction("android.intent.action.order_ok");
registerReceiver(myReceive, filter);
}
@Override
protected void onStop()
 { 
super.onStop();//不可见时
needPopOrderOver = false;
}
@Overrideprotected
 void onStart() { 
super.onStart();//可见时
needPopOrderOver = true;
}
public
class
MyReceive
extends
BroadcastReceiver {
@Override
public void onReceive(Context
 context, Intent intent) {
String
 action = intent.getAction(); 
if
 (Constants.ORDER_OK_ACTION.equals(action))
 { 
//收到广播 弹出popwindow
 } }}
}



方法二:
声明一个activity管理类用来管理当前正在显示的activity,其中最主要的两个方法我用红色标出来
public class MyActivityManager {
    private static MyActivityManager sInstance = new MyActivityManager();
    private WeakReference sCurrentActivityWeakRef;
    private MyActivityManager() {

    }

    public static MyActivityManager getInstance() {
        return sInstance;
    }
    public Activity getCurrentActivity() {
        Activity currentActivity = null;
        if (sCurrentActivityWeakRef != null) {
            currentActivity = sCurrentActivityWeakRef.get();
        }
        return currentActivity;
    }
    private static Stack mActivityStack;
    public void setCurrentActivity(Activity activity) {
        sCurrentActivityWeakRef = new WeakReference(activity);
    }
    /**
     * 推出栈顶Activity
     */
    public void popActivity(Activity activity) {
        if (activity != null) {
            activity.finish();
            mActivityStack.remove(activity);
            activity = null;
        }
    }

    /**
     * 获得当前栈顶Activity
     */
    public Activity currentActivity() {
        //lastElement()获取最后个子元素,这里是栈顶的Activity
        if(mActivityStack == null || mActivityStack.size() ==0){
            return null;
        }
        Activity activity = (Activity) mActivityStack.lastElement();
        return activity;
    }

    /**
     * 将当前Activity推入栈中
     */
    public void pushActivity(Activity activity) {
        if (mActivityStack == null) {
            mActivityStack = new Stack();
        }
        mActivityStack.add(activity);
    }

    /**
     * 弹出指定的clsss所在栈顶部的中所有Activity
     * @clsss : 指定的类
     */
    public void popTopActivitys(Class clsss) {
        while (true) {
            Activity activity = currentActivity();
            if (activity == null) {
                break;
            }
            if (activity.getClass().equals(clsss)) {
                break;
            }
            popActivity(activity);
        }
    }

    /**
     * 弹出栈中所有Activity
     */
    public void popAllActivitys() {
        while (true) {
            Activity activity = currentActivity();
            if (activity == null) {
                break;
            }
            popActivity(activity);
        }
    }

}


然后在application中:
registerActivityLifecycleCallbacks是application中管理所有activity生命周期的一个方法,可以在该方法中处理我们的需求,当activity不可见和可见时设置刚才创建的
activitymanager中的activity对象,在需要弹出popwondow的地方,直接掉用即可。
@Override
        public void onCreate() {
            super.onCreate();

         
            registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle bundle) {

                }

                @Override
                public void onActivityStarted(Activity activity) {
                    MyActivityManager.getInstance().setCurrentActivity(activity);
                }

                @Override
                public void onActivityResumed(Activity activity) {

                }

                @Override
                public void onActivityPaused(Activity activity) {
                    MyActivityManager.getInstance().setCurrentActivity(null);
                }

                @Override
                public void onActivityStopped(Activity activity) {

                }

                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

                }

                @Override
                public void onActivityDestroyed(Activity activity) {

                }
            });
        }


//调用方法:
MyActivityManager.getInstance().getCurrentActivity()// 就是当前正在运行的activity,然后弹出popwindow即可。




















你可能感兴趣的:(android在任意界面弹出popwindow的两种方方法)