从适配器中更改对话框图像?
Changing Dialog Image from Within Adapter?
所以我有一个包含列表项的 ListView,每个列表项中都有不同的图像。我有我的代码设置,以便当用户单击图像时,它将通过使用对话框 class 显示该特定图像的扩展版本。
但是,无论我试过什么代码,似乎都无法使对话框图像发生变化!我不能在适配器中修改布局元素吗?我只能通过将相关代码放入我的适配器中来弄清楚如何引用我的个人列表项图像。
需要更改什么,我做错了什么?
我的适配器中的适用代码供参考:
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(LOG_TAG, "Calling ImageView OnClickListener");
int imageId = currentWord.getImageResourceId();
Dialog aD = new Dialog(mContext);
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
View popupLayout = layoutInflater.inflate(R.layout.popup_image_layout, null);
ImageView popupImageView = (ImageView) popupLayout.findViewById(R.id.popup_imageView);
Glide
.with(mContext)
.load(imageId)
.apply(new RequestOptions().circleCrop())
.into(popupImageView);
aD.setContentView(R.layout.popup_image_layout);
aD.show();
}
});
感谢您的帮助!
所以我最终自己想出了答案。
在 aD.setContentView()
下,我应该将 popupLayout
作为目标,它已经在同一行中分配并膨胀了 R.layout.popup_image_layout
...通过重新引用布局,该代码实际上并没有膨胀布局,因此无法显示任何内容。
所以所有需要更改的是:将 aD.setContentView(R.layout.popup_image_layout)
修改为 aD.setContentView(popupLayout)
现在,当我单击 ListView 项目中的各个图像时,每个图像的正确图像都会在展开的ImageView,通过对话框显示 class.
更新:
添加了一些额外的代码以确保对话框在关闭后被完全删除。否则,它会保留在内存中,并且内存使用会继续堆叠并在每个后续对话框打开时无限增加。
更新了以下代码:
Dialog aD = null;
final int imageId = currentWord.getImageResourceId();
final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View popupLayout = layoutInflater.inflate(R.layout.popup_image_layout, null);
final ImageView popupImageView = (ImageView) popupLayout.findViewById(R.id.popup_imageView);
if (aD == null) {
aD = new Dialog(mContext);
aD.getWindow().setBackgroundDrawableResource(R.color.transparent);
}
Log.i(LOG_TAG, "Calling ImageView OnClickListener");
Glide
.with(mContext)
.load(imageId)
.apply(new RequestOptions().circleCrop())
.into(popupImageView);
aD.setContentView(popupLayout);
aD.show();
popupLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
aD.dismiss();
aD = null;
}
});
}
});
所以我有一个包含列表项的 ListView,每个列表项中都有不同的图像。我有我的代码设置,以便当用户单击图像时,它将通过使用对话框 class 显示该特定图像的扩展版本。
但是,无论我试过什么代码,似乎都无法使对话框图像发生变化!我不能在适配器中修改布局元素吗?我只能通过将相关代码放入我的适配器中来弄清楚如何引用我的个人列表项图像。
需要更改什么,我做错了什么?
我的适配器中的适用代码供参考:
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(LOG_TAG, "Calling ImageView OnClickListener");
int imageId = currentWord.getImageResourceId();
Dialog aD = new Dialog(mContext);
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
View popupLayout = layoutInflater.inflate(R.layout.popup_image_layout, null);
ImageView popupImageView = (ImageView) popupLayout.findViewById(R.id.popup_imageView);
Glide
.with(mContext)
.load(imageId)
.apply(new RequestOptions().circleCrop())
.into(popupImageView);
aD.setContentView(R.layout.popup_image_layout);
aD.show();
}
});
感谢您的帮助!
所以我最终自己想出了答案。
在 aD.setContentView()
下,我应该将 popupLayout
作为目标,它已经在同一行中分配并膨胀了 R.layout.popup_image_layout
...通过重新引用布局,该代码实际上并没有膨胀布局,因此无法显示任何内容。
所以所有需要更改的是:将 aD.setContentView(R.layout.popup_image_layout)
修改为 aD.setContentView(popupLayout)
现在,当我单击 ListView 项目中的各个图像时,每个图像的正确图像都会在展开的ImageView,通过对话框显示 class.
更新:
添加了一些额外的代码以确保对话框在关闭后被完全删除。否则,它会保留在内存中,并且内存使用会继续堆叠并在每个后续对话框打开时无限增加。
更新了以下代码:
Dialog aD = null;
final int imageId = currentWord.getImageResourceId();
final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
viewHolder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View popupLayout = layoutInflater.inflate(R.layout.popup_image_layout, null);
final ImageView popupImageView = (ImageView) popupLayout.findViewById(R.id.popup_imageView);
if (aD == null) {
aD = new Dialog(mContext);
aD.getWindow().setBackgroundDrawableResource(R.color.transparent);
}
Log.i(LOG_TAG, "Calling ImageView OnClickListener");
Glide
.with(mContext)
.load(imageId)
.apply(new RequestOptions().circleCrop())
.into(popupImageView);
aD.setContentView(popupLayout);
aD.show();
popupLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
aD.dismiss();
aD = null;
}
});
}
});