自定义对话框在Android 4.0+上不起作用

时间:2013-09-23 20:04:12

标签: android dialog

我尝试使用onCreateContextMenuonContextItemSelected创建自定义对话框。所以当用户选择上下文菜单时,它会创建一个对话框。

我在用户选择第一个元素时使用此代码:

if(item.getItemId() == 0) {

        try {

            imageUrl = new URL(UrlSprite);
            HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
            conn.connect();
            loadedImage = BitmapFactory.decodeStream(conn.getInputStream());

            final Dialog d = new Dialog(ctx);
            d.requestWindowFeature(Window.FEATURE_NO_TITLE);
            d.setCancelable(true);

            d.setContentView(R.layout.popupsprite);

            TextView titulo = (TextView)d.findViewById(R.id.pkmnNombre);
            titulo.setText(Constantes.Pokemon[numero-1]);

            ImageView image = (ImageView)d.findViewById(R.id.spritePopup);
            image.setImageBitmap(loadedImage);

            d.show();

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

但是当我点击应用程序关闭时。它只发生在Android 3.0+中,在早期版本中,如2.1,2.2,2.3,弹出窗口显示正确。

有什么想法吗?

感谢。

解决方案

final Dialog d = new Dialog(ctx);
d.requestWindowFeature(Window.FEATURE_NO_TITLE);
d.setCancelable(true);

d.setContentView(R.layout.popupsprite);

TextView titulo = (TextView)d.findViewById(R.id.pkmnNombre);
titulo.setText(Constantes.Pokemon[numero-1]);

ImagenSprite = (ImageView)d.findViewById(R.id.spritePopup);

attachImage(UrlSprite, ImagenSprite);

d.show();

public void attachImage(final String fileUrl, final ImageView view) {
    EXECUTOR.execute(new Runnable() {

        @Override
        public void run() {
            final Bitmap image = downloadImg(fileUrl);

            if (image != null) {
                view.post(new Runnable() {

                    @Override
                    public void run() {
                        view.setImageBitmap(image);
                    }
                });
            }
        }

        Bitmap downloadImg(String imgUrl) {

            try {
                URL imageUrl = new URL(imgUrl);
                HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
                conn.connect();
                loadedImage = BitmapFactory.decodeStream(conn.getInputStream());
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return loadedImage;

        }

    });
}

2 个答案:

答案 0 :(得分:2)

您正在ui线程上运行与网络相关的操作

HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
conn.connect();

您应该使用ThreadAsyncTask。您将获得NetworkOnMainThreadException发布蜂窝

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

因此,创建自己的线程并在那里进行网络相关操作或使用Asynctask。

http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:0)

Raghunandan 使用DialogFragment之外,我认为它已被弃用于Android 4.0+(作为旁注)。

Android DialogFragment vs Dialog