在使用webservice之后,我得到了一个json对象,在解析之后我需要创建一个textview(对于每个元素)并且每个对象都添加一个监听器。 目前所有TEXTVIEW都使用相同的ID(最后一个)进行绑定,因此它们都会传递相同的额外内容(在本例中为id_asignacion)
这里是添加文本视图并将其与侦听器绑定的代码:
for (int i=0; i < jArray.length(); i++){
try {
JSONObject oneObject = jArray.getJSONObject(i);
descripcion = oneObject.getString("descripcion");
direccion = oneObject.getString("direccion");
id_denuncia = oneObject.getString("idDenuncia");
TextView nueva_asignacion = new TextView(ctx);
ImageView separador = new ImageView(ctx);
separador.setImageResource(R.drawable.barrablanca);
nueva_asignacion.setTextColor(getResources().getColor(R.color.gris_claro));
nueva_asignacion.setTextSize(getResources().getDimension(R.dimen.dpde10));
if(int_color == 0){
nueva_asignacion.setBackgroundColor(getResources().getColor(R.color.blanco));
int_color = 1;
}else{
nueva_asignacion.setBackgroundColor(getResources().getColor(R.color.gris_perfil));
int_color = 0;
}
nueva_asignacion.setText(descripcion + ".\nEn: " + direccion);
linearLayout_asignaciones.addView(nueva_asignacion);
nueva_asignacion.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
abrir_detalle_asignacion(id_denuncia);
}
});
linearLayout_asignaciones.addView(separador);
} catch (JSONException e) {
e.printStackTrace();
}
}
我将它们绑定到(abrir_detalle_asignacion)的函数如下:
public void abrir_detalle_asignacion(String id_denuncia) {
Intent intent = new Intent(ctx, DetalleAsignacion.class);
intent.putExtra("RUT", RutLog);
intent.putExtra("id_inspector", id_inspector);
intent.putExtra("id_asignacion", id_denuncia);
startActivityForResult(intent, 0);
overridePendingTransition(R.anim.from_middle, R.anim.to_middle);
}
TL DR:每个Textview都与SAME id_denuncia绑定,因此所有Textviews都做同样的事情。
答案 0 :(得分:2)
我认为你有一个id_denuncia的问题,因为你在每次迭代时覆盖它的值,并且每次点击都会实际传递最后一个值,这就是为什么只有最后一个TextView按预期工作
例如,有几种解决方案 通过索引从json传递字符串,类似于 -
abrir_detalle_asignacion(jArray.getJSONObject(i).getString("idDenuncia"));
OR
可能将值存储在数组中,并通过索引将数组中的值传递给方法:
abrir_detalle_asignacion(id_denuncia_array[i]);
答案 1 :(得分:0)
您可以声明自己的班级
class MyOnClick implements View.OnClickListener {
private final String id;
MyOnClick(String s) {
id = new String(s);
}
public void onClick(View v) {
abrir_detalle_asignacion(id);
}
}
并使用它:nueva_asignacion.setOnClickListener(new MyOnClick(id_denuncia))