我尝试使用onCreateContextMenu
和onContextItemSelected
创建自定义对话框。所以当用户选择上下文菜单时,它会创建一个对话框。
我在用户选择第一个元素时使用此代码:
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;
}
});
}
答案 0 :(得分:2)
您正在ui线程上运行与网络相关的操作
HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection();
conn.connect();
您应该使用Thread
或AsyncTask
。您将获得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+(作为旁注)。