Android:在创建和显示 AlertDialog 之前获取资源 ID?
Android: Getting Resource ID before AlertDialog is created and shown?
我目前正在努力让用户点击一个图像,然后将显示一个带有该图像放大版本的 AlertDialog。我不太确定 AlertDialog 是否是解决此问题的最佳方法,但这是我目前的解决方案。
我发现自己在显示警报对话框之前很难获取 ImageView 的资源 ID。这是发生错误的确切代码段(评论是失败的修复尝试):
mPhotoView.setOnClickListener(new View.OnClickListener() {
@SuppressLint("ResourceType")
@Override
public void onClick(View view) {
if(mPhotoView != null){
AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = requireActivity().getLayoutInflater();
dialog.setView(inflater.inflate(R.layout.zoomed_image, null)).create();
//medImg.setImageResource(dialog.getContext().getResources().getLayout(R.layout.zoomed_image).getIdAttributeResourceValue(R.id.ivZoomedImg));
//ivZoomedImg = getActivity().findViewById(R.id.ivZoomedImg);
//ivZoomedImg = view.findViewById(R.id.ivZoomedImg);
Bitmap bm = PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity());
ivZoomedImg.setImageBitmap(bm); // <- null reference
dialog.show();
}
}
});
具体来说,我似乎无法找到一种方法来访问本应通过 LayoutInflator 实例化的 R.id.ivZoomedImg
?老实说,我什至不确定这是否可行,尽管我不明白为什么不行。有谁知道解决这个问题的最佳方法是什么?
一些注意事项:
R.layout.zoomed_image
只是一个 XML 布局,包含一个 ImageView,id 为 R.id.ivZoomedImg
mPhotoView
是被点击显示更大的图像
修复涉及简单地实例化一个独立的视图,您可以从中提取 ImageView 资源 ID!
添加的代码行数:
View v = inflater.inflate(R.layout.zoomed_image, null);
ivZoomedImg = v.findViewById(R.id.ivZoomedImg);
dialog.setView(v).create();
我目前正在努力让用户点击一个图像,然后将显示一个带有该图像放大版本的 AlertDialog。我不太确定 AlertDialog 是否是解决此问题的最佳方法,但这是我目前的解决方案。
我发现自己在显示警报对话框之前很难获取 ImageView 的资源 ID。这是发生错误的确切代码段(评论是失败的修复尝试):
mPhotoView.setOnClickListener(new View.OnClickListener() {
@SuppressLint("ResourceType")
@Override
public void onClick(View view) {
if(mPhotoView != null){
AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = requireActivity().getLayoutInflater();
dialog.setView(inflater.inflate(R.layout.zoomed_image, null)).create();
//medImg.setImageResource(dialog.getContext().getResources().getLayout(R.layout.zoomed_image).getIdAttributeResourceValue(R.id.ivZoomedImg));
//ivZoomedImg = getActivity().findViewById(R.id.ivZoomedImg);
//ivZoomedImg = view.findViewById(R.id.ivZoomedImg);
Bitmap bm = PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity());
ivZoomedImg.setImageBitmap(bm); // <- null reference
dialog.show();
}
}
});
具体来说,我似乎无法找到一种方法来访问本应通过 LayoutInflator 实例化的 R.id.ivZoomedImg
?老实说,我什至不确定这是否可行,尽管我不明白为什么不行。有谁知道解决这个问题的最佳方法是什么?
一些注意事项:
R.layout.zoomed_image
只是一个 XML 布局,包含一个 ImageView,id 为 R.id.ivZoomedImg
mPhotoView
是被点击显示更大的图像
修复涉及简单地实例化一个独立的视图,您可以从中提取 ImageView 资源 ID!
添加的代码行数:
View v = inflater.inflate(R.layout.zoomed_image, null);
ivZoomedImg = v.findViewById(R.id.ivZoomedImg);
dialog.setView(v).create();