我知道这个问题可能与另一个问题重复,但我试图按照类似问题的解决方案中的建议,但没有任何成功。我对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消息来测试条件是否应该评估,结果是正数但图像不会改变。请让我知道我哪里出错或错过了什么。感谢
答案 0 :(得分:0)
您要将相同的图像设置两次。在这两种情况下,您都使用指向setImageResource()
的{{1}} ImageView
方法将drawable设置为R.id.ivMailIcon
。
你可能在点击时再次正确地“设置”图像,但由于它是相同的图像,它似乎不会改变。