我正在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);
}
答案 0 :(得分:1)
AFAIK,无法在应用程序中的所有活动之间共享弹出窗口,因为它附加到显示它的活动的上下文中。一种选择是获取绘制窗口的权限并使服务不断运行,从而在您的活动中绘制弹出UI。但是,我没有真正建议。
更简洁的方法是使用 多个片段 而不是多个活动。 一个活动 ,其中包含所有碎片。使用Activity的上下文显示Popup,您将能够在所有片段中显示它。