【发布时间】:2013-09-27 03:17:52
【问题描述】:
我想要做的:获取 ImageView 的 src 的 id,将其与两个可绘制对象的 id 进行比较,然后使用 AsyncTask 交换它们(只是因为我想了解它是如何工作的)。 我在这里读过类似的问题,到目前为止,这就是我所得到的:
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView image = (ImageView) findViewById(R.id.img);
Integer integer = (Integer) image.getTag();
}
private class cambiarImagen extends AsyncTask<Integer, Integer, Integer> {
protected void onPreExecute() {
ImageView image = (ImageView) findViewById(R.id.img);
Integer integer = (Integer) image.getTag();
int img1 = R.drawable.zapato;
int img2 = R.drawable.zapatod;
}
@Override
protected Integer doInBackground(Integer... values) {
// parte logica
int num = values[0];
int zapato = values[1];
int zapatod = values[2];
if (num == zapato) {
num = zapatod;
} else if (num == zapatod) {
num = zapato;
}
return num;
}
protected Void onPostExecute(Integer... values) {
int num = values[0];
ImageView image = (ImageView) findViewById(R.id.img);
image.setTag(num);
return null;
}
}
这当然行不通。 1.我不明白如何获取ImageView作为其src的drawable的id。 2.不明白AsyncTask中params是怎么传递的; onPreExecute 应该接收 UI 的东西,doInbackground 应该接收它来比较它并返回应该设置为 ImageView 的 drawable int,onPreExecute 应该将它设置为 ImageView。
【问题讨论】:
-
对于初学者,您可以省略参数并使用其他版本的 AsyncTask(非泛型)。然后,您可以在 Main 中声明私有成员并在启动 AsyncTask 之前将值存储在其中,并且由于它是内部类,因此可以访问这些成员。
-
我不认为可以在运行时确定视图的背景 ID。但是,这应该是已知的,因为它通常设置在布局或 onCreate 中,并且如果您的编码“正确”,该值将在资源文件 (R.Drawable.bkground) 中定义。我通常不会遇到我不知道值是什么的情况,如果它发生变化(比如白色/启用到灰色/禁用),那么您可以通过初始化为一种颜色来跟踪,然后根据其他条件(通常由用户输入决定,而不是当前背景)。
标签: java android android-asynctask imageview