从适配器内更改对话框图像?

时间:2018-02-14 23:08:26

标签: android dialog android-arrayadapter android-imageview android-adapter

所以我有一个带有列表项的ListView,每个列表项都有不同的图像。我有我的代码设置,以便当用户单击图像时,它将使用Dialog类显示该特定图像的扩展版本。

但是,无论我尝试过哪种代码,似乎都不能让Dialog图像发生变化!我无法从适配器中修改布局元素吗?我只能通过将相关代码放在我的适配器中来弄清楚如何引用我的列表项目图像。

需要改变什么,我做错了什么?

以下是我的适配器中的适用代码供参考:

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}
function checkCookie() {
    var name = getCookie("username");
    if (name != "") {
        document.getElementById('name').innerHTML = "Welcome again " + name;
    } 
    else {
        name = prompt("Please enter your name:", "");
        if (name != "" && name != null) {
            setCookie("username", name, 365);
        }
    }
}

感谢您的任何帮助!

1 个答案:

答案 0 :(得分:0)

所以我最终自己找出了答案。

aD.setContentView()下,我应该已经popupLayout作为目标,已经在同一行中分配了R.layout.popup_image_layout并进行了充气......通过重新引用布局,代码实际上并没有给布局充气,所以没有任何东西可以展示。

因此需要更改的是:将aD.setContentView(R.layout.popup_image_layout)修改为aD.setContentView(popupLayout),现在当我点击ListView项目中的各个图像时,每个弹出的ImageView中都会显示正确的图像,这是通过Dialog类显示的。

更新:

添加了一些额外的代码,以确保在关闭后完全删除对话框。否则,它将保留在内存中,并且在打开每个后续Dialog时,内存使用将继续堆叠并无限增加。

以下更新的代码:

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;
                    }
                });
            }
        });