繁体   English   中英

单击按钮时android更改列表视图内的图像视图

[英]android change image view inside list view when button is clicked

我知道这个问题可能是另一个问题的重复,但是我尝试遵循类似问题的解决方案中的建议,但没有成功。 我是android的新手,所以请指出正确的方向。

方案:我有一个列表视图,该列表视图包含一个包含小图像和文本视图的自定义布局文件。 列表视图显示了所有预期的项目,但我想要做的如下:单击按钮时,将评估一个条件,如果结果为true,我想将默认图像更改为另一图像。 我知道我必须在必须覆盖的get view方法中执行图像切换。

public View getView(int position, View convertView, ViewGroup parent) {
            View itemView=convertView;
            if (itemView==null) {
                itemView=getLayoutInflater().inflate(R.layout.check_list_view, parent, false);
            }
            MailObject currentMailObject=mailList.get(position);
            ImageView ivCurrentMail=(ImageView)itemView.findViewById(R.id.ivMailIcon);
            if (mailList.get(position).isScanned()) {
                ivCurrentMail.setImageResource(R.drawable.ic_mail_scanned);

            }


            return itemView;
        }

该按钮的代码是:

btnSave.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), scanResult, Toast.LENGTH_LONG).show();

            if(!scannedMails.contains(scanResult))
            {
                scannedMails.add(scanResult);
                for (int i = 0; i < mailList.size(); i++) {
                    if (mailList.get(i).getCode().equalsIgnoreCase(scanResult)) {
                        int position=i;
                        mailList.get(i).setScanned(true);

                        ImageView ivCurrent = (ImageView) lvMails.getAdapter().getView(position, null, null).findViewById(R.id.ivMailIcon);
                        ivCurrent.setImageResource(R.drawable.ic_mail_scanned);

                        lvMails.invalidateViews();

                    }
                }

            }           






        }
    });

列表视图项的XML文件如下:

<ImageView
    android:id="@+id/ivMailIcon"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:src="@drawable/ic_mail_not_scanned" />

    <TextView
        android:id="@+id/tvMailItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="17dp"
        android:layout_toRightOf="@+id/ivMailIcon"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

我通过在列表视图项目单击时显示Toast消息来测试条件是否可以评估,结果是肯定的,但是图像只是没有变化。 请让我知道我做错了什么或错过了什么。 谢谢

您要设置两次相同的图像。 在这两种情况下,都可以对指向R.id.ivMailIconImageView使用setImageResource()方法,以将可绘制R.drawable.ic_mail_scanned设置为R.drawable.ic_mail_scanned

您可能会“设置”一次单击以再次正确显示图像,但是由于它是同一图像,因此看起来不会改变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM