分配给适配器列表视图上的元素的按钮不能很好地工作

时间:2015-01-21 11:47:04

标签: android listview button android-listview

我有一个“comentario”元素列表,这是comentario类:

public class Comentario {
private String comentarista;
private String comentario;
private Button boton;
public Comentario(String nombre, String comentario){
    this.comentario=comentario;
    this.comentarista= nombre;
}
public String getComentarista() {
    return comentarista;
}
public void setComentarista(String comentarista) {
    this.comentarista = comentarista;
}
public String getComentario() {
    return comentario;
}
public void setComentario(String comentario) {
    this.comentario = comentario;
}
public Button getBoton() {
    return boton;
}
public void setBoton(Button boton) {
    this.boton = boton;
}

}

“comentario”的listview有他的适配器,有按钮用于回答每个评论给他的主人。当用户按下“响应者”按钮时,另一个活动必须开始回答它(“ActivityRespuestaComentario”)。但是,当我按下“ActivityRespuestaComentario”按钮时,此活动会从适配器接收通过捆绑包调用它的任何名称,并且该注释的答案适用于列表中任何评论的所有者。

这是“ActivityRespuestaComentario”活动:

package com.example.pestanasholacampus;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ActivityRespuestaComentario extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.actividad_respuestaenperfil);
    Intent intent= getIntent();
    Bundle bundle= intent.getExtras();
    String destinatario;
    if(bundle!=null){
        destinatario= bundle.getString("NombreDestinatario");
        System.out.println("El destinatario es:"+ destinatario);
    }
    Button botonEnviarRespuesta= (Button) findViewById(R.id.botonEnviaRespuestaComentario);
    botonEnviarRespuesta.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //Aqui debemos añadir el comentario a la lista de comentarios del destinatario en la base de datos.
            System.out.println("Comentario añadido.");
            finish();

        }
    });


}

这是适配器,它为列表视图的每个按钮都有onclicklistener:

package com.example.pestanasholacampus;

import java.util.ArrayList;


import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.sax.StartElementListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

@SuppressLint("ViewHolder") public class ComentarioenPerfilAdapter extends BaseAdapter {
protected Activity activity;
protected ArrayList<Comentario> comentarios;
Context mcontext;
TextView nombre;

public ComentarioenPerfilAdapter(Activity activity, ArrayList<Comentario> comentarios, Context context){
    this.activity= activity;
    this.comentarios= comentarios;
    this.mcontext= context;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return comentarios.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return comentarios.get(position);
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}

@SuppressLint("InflateParams") 
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
    LayoutInflater inf=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);;
    View v= inf.inflate(R.layout.comentariolistperfil,null);
    //Asociar el layout de la lista que hemos creado.
    //Definimos un objeto a partir del array, vamos a cargar el contenido
    //de ese objeto en el view de la lista.
    Comentario comentario= comentarios.get(position);
    //Cargamos el nombre del comentarista.
    nombre= (TextView)v.findViewById(R.id.nombreComentarista);
    nombre.setText(comentario.getComentarista());
    //Cargamos el comentario
    TextView coment= (TextView)v.findViewById(R.id.comentario);
    coment.setText(comentario.getComentario());
    //Cargamos el boton
    Button boton= (Button)v.findViewById(R.id.botonResponder);
    boton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
                System.out.println("Boton responder comentario pulsado");
                Intent intent = new Intent(mcontext,ActivityRespuestaComentario.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);  
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.putExtra("NombreDestinatario", nombre.getText());
                mcontext.startActivity(intent);
        }
    });
    return v;
}

}

我做了“Comentario”课程,对列表视图中的每个元素进行思考而不考虑按钮,问题可能就在那里,但我不知道我必须将每个元素的onclicklistener正确地放到他的主人身上。

我想你们所有人都需要帮助我,如果不是,请告诉我,我会发布它。 谢谢你。

3 个答案:

答案 0 :(得分:0)

更改以下方法

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}

这应该有效。

答案 1 :(得分:0)

如果要单击listview的小部件,则必须在适配器类中提及使用适配器类的xml类定义它们的位置。

答案 2 :(得分:0)

解决方案是在按钮上添加标签。每个按钮都有自己的标签,其中包含获取正确数据所需的对象。 button.addTag(AMIGO);在适配器中 您必须使用android:onclick =“handler”设置按钮,并且您的处理程序必须保留在您调用适配器的类中。 此处理程序将标记作为getTag通过一个实例。