弹出窗口出现在应用程序的所有活动中

时间:2016-03-31 22:30:08

标签: android android-asynctask popupwindow

我正在onPostExecute()中的AsyncTask中创建一个弹出窗口。当我在同一个活动上时它显示完美,但如果我在另一个活动上,它没有显示,应用程序崩溃。我想让弹出窗口显示在用户当前的任何活动上。

因为,layoutinflater只有一个活动的basecontext,这就是它没有在其他活动上显示的原因。我怎样才能在其他活动中展示它。

这是我的弹出窗口代码:

protected void onPostExecute(Integer progress) {



    View popupView = layoutinflater.inflate(R.layout.popup_window, null);
    final PopupWindow popupWindow = new PopupWindow(
            popupView,
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

    ImageView btnDismiss = (ImageView) popupView.findViewById(R.id.imageView3);
    ImageView btnDismiss2 = (ImageView) popupView.findViewById(R.id.imageView4);
    ImageView btnDismiss3 = (ImageView) popupView.findViewById(R.id.imageView5);
    btnDismiss.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            popupWindow.dismiss();
        }
    });

    btnDismiss2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            popupWindow.dismiss();
        }
    });

    btnDismiss3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //   File downloaddirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "Youtube Videos");
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            Uri uri = Uri.parse(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath()
                    + "/XYZ/");
            intent.setData(uri);
            GlobalDownload.context.startActivity(Intent.createChooser(DownloadScreen.intent, "Open folder"));

        }
    });

    popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);



    }

1 个答案:

答案 0 :(得分:1)

AFAIK,无法在应用程序中的所有活动之间共享弹出窗口,因为它附加到显示它的活动的上下文中。一种选择是获取绘制窗口的权限并使服务不断运行,从而在您的活动中绘制弹出UI。但是,我没有真正建议。

更简洁的方法是使用 多个片段 而不是多个活动。 一个活动 ,其中包含所有碎片。使用Activity的上下文显示Popup,您将能够在所有片段中显示它。