我想做的是:获取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的可绘制对象的ID。
2.我不明白如何在AsyncTask中传递参数; onPreExecute应该接收UI内容,doInbackground应该接收它以进行比较并返回应设置为ImageView的drawable int,onPreExecute应该将其设置为ImageView。

最佳答案

我不明白如何获取ImageView作为其src的可绘制对象的ID。


我不必这样做,因此可能无法正常工作,但您应该可以使用

imageView.getDrawable().getId();



  我不明白如何在AsyncTask中传递参数;


您在task.execute()中传递的所有内容都会被doInBackground()接收。如果调用publishProgress(),则无论发送什么参数,onProgressUpdate()都会收到。 doInBackground()返回的数据由onPostExecute()接收。

就是说,您不需要AsyncTask,但是我知道您说过您想学习如何使用它。除了这两件事之外,我对您具体遇到的问题还是有些困惑,所以请详细说明一下。

ImageView Docs

AsyncTask Docs

AsyncTask Example(如果有帮助的话)

09-26 21:38
查看更多