从另一个函数更改动态添加的按钮背景

时间:2013-05-23 13:44:09

标签: android

我将这些按钮添加到我的TableL中,就像这样

TableLayout table = (TableLayout) findViewById( R.id.tableLayout1 );
   Bitmap bmp = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+ myPrefLocalMedia + mat_foto);

   final ImageButton b = new ImageButton(this);
   b.setScaleType(ImageView.ScaleType.FIT_CENTER);
   b.setAdjustViewBounds(true);
   b.setImageBitmap(bmp);
   b.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
         ProgressDialog progressDialog = new ProgressDialog(SuperlineaActivity.this);
         progressDialog.setMessage("Realizando el pedido...");
         progressDialog.setCancelable(false);
         b.setPressed(true);
         if ( (miPedido == null) || ( miPedido.isEnproceso()==false) ) {
            Log.e("log_","Hago post! Creo pedido!!");
            Hacerpost eginpost = new Hacerpost(SuperlineaActivity.this, progressDialog);
            eginpost.execute(myPrefApiPeticionMaterial,mat_id, PUESTOID, LINEAID, USUARIOID, PRODUCTOID);
         } else {
            Hacerput puttask = new Hacerput(SuperlineaActivity.this, progressDialog);
            puttask.execute(myPrefApiPeticionMaterial,miPedido.getId());
         }
      }
   });

row.addView( b, 300,300 );

按下它时会执行一些AsyncTask(HttpPost)并返回一个颜色代码。我需要用那个颜色代码更改按下的背景颜色,但我怎么知道我点击的女巫按钮?

这是我收到HttpPost数据的函数:

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void erantzuna(JSONObject myJson) {
        if ( miPedido == null ) {
            AlertDialog alerta   = new AlertDialog.Builder(SuperlineaActivity.this).create();
            alerta.setTitle("PEDIDO EN PROCESO");
            alerta.setMessage("El pedido se a procesado. Espera.");
            alerta.setButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(getApplicationContext(), "Registrado", Toast.LENGTH_SHORT).show();
                }
            });
            alerta.show();
            String kolorea = null;
            String pedidoid = null;
            try {
                kolorea = myJson.getString("kolorea");
                pedidoid = myJson.getString("pedidoid");
            } catch (JSONException e) {
                e.printStackTrace();
            }
            Log.e("log_", "Bueltan da: => " + kolorea);
            Log.e("log_", "Bueltan da: => " + pedidoid);
            miPedido = new Pedido(pedidoid, kolorea);


            try {
                if (miPedido.getKolorea().equals("kuadro-gorria")) {
                  //
                  // Here I need to change the pressed ImageButton color to RED
                  //
                } elseif ( miPedido.getKolorea().equals("kuadro-urdina")) {
                  //
                  // Here I need to change the pressed ImageButton color to BLUE
                  //
                } else {
                  //
                  // Here I need to change the pressed ImageButton color to transparent
                  //
                }
            } catch (Exception e) {
                Log.e("log_","Boton Color => " + e.toString());
            }


        } else {
            miPedido = null;
        }
    }

任何帮助或线索? 提前致谢

1 个答案:

答案 0 :(得分:0)

也许您应该管理动态添加的按钮,比如将它们放入列表中,或者,如果您以后不需要它们的引用,只需将Button提供给asyncTask(就像在构造函数中一样)并更改它在asynctask的onPostExecute方法中的颜色。但是不要忘记准备在任务等待响应时Activity被销毁的情况,因为在这种情况下Button将不再存在,这也可能导致内存泄漏。