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

Posted

技术标签:

【中文标题】android在单击按钮时更改列表视图内的图像视图【英文标题】:android change image view inside list view when button is clicked 【发布时间】:2014-10-08 04:20:47 【问题描述】:

我知道这个问题可能与另一个问题重复,但我试图遵循类似问题的解决方案中的建议,但没有成功。我对 android 比较陌生,所以请指出正确的方向。

场景: 我有一个列表视图,其中包含一个自定义布局文件,其中包含一个小图像和一个文本视图。列表视图按预期显示所有项目,但我想要做的如下: 单击按钮时,会评估一个条件,如果结果为真,我想将默认图像更改为另一个。我知道我必须在我必须覆盖的 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_
    android:layout_
    android:src="@drawable/ic_mail_not_scanned" />

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

</RelativeLayout>

我确实通过在列表视图项单击上显示 Toast 消息来测试条件是否按应有的方式评估,结果是肯定的,但图像只是没有改变。请让我知道我哪里出错或错过了什么。谢谢

【问题讨论】:

【参考方案1】:

您将同一图像设置了两次。在这两种情况下,您都对指向R.id.ivMailIconImageView 使用setImageResource() 方法将drawable 设置为R.drawable.ic_mail_scanned

您可能正在“设置”以在单击时再次正确显示图像,但由于它是相同的图像,它似乎不会改变。

【讨论】:

列表视图中显示的默认图标与我尝试分配的图标不同,所以我猜它应该改变。除非我没听懂你想说什么 你想改成的图片的drawable资源是什么? 默认是 ic_mail_not_scanned 我把它改成了 ic_mail_scanned 添加您的 XML。除非这是您在 XML 中设置的,否则您根本不使用 ic_mail_not_scanned。 是的 ic_mail_not_scanned 在 xml 中设置

以上是关于android在单击按钮时更改列表视图内的图像视图的主要内容,如果未能解决你的问题,请参考以下文章

在Android中动态更改视图内的视图

单击抽屉的任何项目而不在android中关闭时更改导航抽屉内的视图和内容

在 android 中单击按钮时将列表视图中的选中项目转移到另一个列表视图

单击收藏夹按钮时更新列表视图

表视图内的表视图

Android:从自定义列表视图中单击的按钮获取列表视图项目