利用Gallery
做了一个画廊效果,然后点击每一张图片显示获取照片的时间
献上代码:
gallery.setOnItemSelectedListener(new OnItemSelectedListener() {
// 当Gallery选中项发生改变时触发该方法,timeList是每张照片的时间数组
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
imageView.setImageBitmap(finalbitmaps.get(position));
final String s = timeList.get(position);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FPFloatingPeopleScrutinyCarPhoto.this, s, 2 * 1000).show();
}
});
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
此时的代码是可以正常运行的,但是一旦我把toast里面要显示的s
,改为
Toast.makeText(FPFloatingPeopleScrutinyCarPhoto.this, timeList.get(position), 2 * 1000).show();
直接报错要求把position
改为final
,我不明白的地方就是既然声明了s
是final
了那说明值就是不可改变的,既然不可改变为什么每次点击不同的图片显示的时间却是不一样的,望高手给小弟解惑?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
s
是执行到的时候才被赋值的。且它是个本地变量,意味着此方法每执行一次就会有个新的
s
生成出来,虽然他们都叫s,但其实内存地址是不同的,你可以认为它们是两个完全不想干的变量。