Android 如何在按钮中保存信息?

How to save information in a button in Android?

我得到JSON

{
"id_servicio": "1",
"id_motoboy": "1",
"nombre": "Juan Alexander",
"apellido": "Osorio Obreque",
"rut": "1111111",
"direccion": "Luis uribe 3690",
"telefono1": "1223214",
"comentario": "lorem ipsum",
"referencia": "Al lado del negocio Don Goyito",
"id_estado": "3",
"fecha_hora": "2015-01-13 19:51:27",
"created_at": "2015-01-13 17:51:27",
"updated_at": "-0001-11-30 00:00:00",
"productos": [
    {
        "id_producto": "1",
        "id_empresa": "1",
        "nombre": "Cuenta Rut",
        "descripcion": "Mayor de 18 años",
        "estado": "1",
        "created_at": "2015-01-13 13:04:00",
        "updated_at": "-0001-11-30 00:00:00",
        "pivot": {
            "id_servicio": "1",
            "id_producto": "1"
        }
    },
    {
        "id_producto": "2",
        "id_empresa": "1",
        "nombre": "Chilena",
        "descripcion": "Sueldo mayor a 300.000.-",
        "estado": "1",
        "created_at": "2015-01-14 13:59:31",
        "updated_at": "-0001-11-30 00:00:00",
        "pivot": {
            "id_servicio": "1",
            "id_producto": "2"
        }
    }
]

}

所以我在 android 中使用 productos

的信息创建了按钮
                   JSONArray jsonArray = new JSONArray(tmp.getString("productos"));
                Button bt[] = new Button[jsonArray.length()];

                for (int i = 0; i < jsonArray.length(); i ++){
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                    bt[i] = new Button(DetalleServicioActivity.this);
                    bt[i].setText(jsonArray.getJSONObject(i).getString("nombre"));
                    bt[i].setTextColor(Color.parseColor("#ffffff"));
                    bt[i].setBackgroundColor(Color.parseColor("#17498D"));
                    bt[i].setLayoutParams(params);
                    bt[i].setEnabled(false);
                    bt[i].setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                        }
                    });
                    rl.addView(bt[i]);

                }

我需要的是将产品的标识符(id_producto)保存在按钮中,这样才能知道用户按下(选择)了按钮。

我该怎么做?

使用 btn.setTag(productId) 然后 String productId = (String)btn.getTag()

您可以在按钮标签 (button[i].setTag(id)...) 和 onClick(View v) 中添加 id.. 您可以通过执行 ( (Button)view).getTag() // 将 return 之前传递的 id

您至少可以通过两种方式做到这一点:

1 个标签(这是一个可以存储自定义数据的字段)

bt[i].setTag(jsonArray.getJSONObject(i).getString("id_producto"));

2 闭包(只是将数据传递给监听器)

bt[i].setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String productId = jsonArray.getJSONObject(i).getString("id_producto");
    }
});

您可以将 Button 扩展到新的 class。

public Class CustomButton extends Button {

// Write your own methods & logic here

}