我需要用线程运行代码的某些部分。但是我从run()
函数访问变量时遇到了问题。变量(也是函数参数)需要定义为final,但是当我这样做时,我无法在run()
函数内更改它们的值。例如,现在iv
方法无法访问变量run()
。
有什么方法可以解决这个问题吗?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
convertView = getLayoutInflater().inflate(R.layout.gallery_gridsq, parent, false);
ImageView iv = (ImageView) convertView.findViewById(R.id.icon);
final File file = new File(Uri.parse(getItem(position).toString()).getPath());
Runnable runnable = new Runnable() {
@Override
public void run() {
Bitmap bmp = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
try {
BitmapFactory.decodeStream(new FileInputStream(file), null, options);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
options.inJustDecodeBounds = false;
options.inSampleSize = 2;
try {
bmp = BitmapFactory.decodeStream(new FileInputStream(file), null, options);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
iv.setImageBitmap(bmp);
}
};
new Thread(runnable).start();
return convertView;
}
答案 0 :(得分:0)
您需要做的是让iv
最终成绩:
final ImageView iv = (ImageView) convertView.findViewById(R.id.icon);
在此上下文中final
表示您无法更改对象iv
指向的引用,但您仍然可以调用它的任何方法。还要注意为每个视图创建新的Thread
,我建议使用ExecutorService
代表的线程池。