Android 为listview适配器上的元素指定的按钮不能正常工作

Android 为listview适配器上的元素指定的按钮不能正常工作,android,listview,button,android-listview,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= no

我有一个“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有一个适配器,该适配器有按钮,用于回答其所有者的每条评论。当用户按下“Responder”按钮时,另一个活动必须开始应答(“ActivityRespueStacementario”)。但是,当我按下按钮“ActivityRespuestaComentario”时,此活动将从适配器接收任何名称,适配器通过捆绑调用此名称,并且对注释的回答是针对列表中注释的任何所有者

这是“活动Espuestacomentario”活动:

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;
}
package com.example.pestanasholacampus;
导入java.util.ArrayList;
导入android.annotation.SuppressLint;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.os.Bundle;
导入android.sax.StartElementListener;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.TextView;
@SuppressLint(“ViewHolder”)公共类ComentarioEnPerfilaAdapter扩展BaseAdapter{
受保护的活动;
受保护的ArrayList comentarios;
语境;
文本视图名称;
公共ComentarioPerfilaAdapter(活动活动、ArrayList comentarios、上下文){
这个。活动=活动;
this.comentarios=comentarios;
this.mcontext=上下文;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回comentarios.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回comentarios.get(位置);
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回arg0;
}
@SuppressLint(“充气参数”)
@凌驾
公共视图getView(内部位置、视图arg1、视图组arg2){
LayoutInflater inf=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);;
视图v=inf.flate(R.layout.comentariolistperfil,null);
//这是一个非常有趣的故事。
//定义一个阵营,一个卡加·艾尔康尼多
//这是一个列表视图。
Comentario Comentario=comentarios.get(位置);
//卡加莫斯·诺姆布雷·德尔科门塔里斯塔。
nombre=(TextView)v.findViewById(R.id.nombreComentarista);
nombre.setText(comentario.getComentarista());
//卡加莫斯科门塔里奥酒店
TextView coment=(TextView)v.findViewById(R.id.comentario);
setText(comentario.getComentario());
//卡加莫斯波顿酒店
按钮boton=(按钮)v.findViewById(R.id.botonResponder);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
System.out.println(“Boton响应器comentario pulsado”);
意向意向=新意向(mcontext,ActivityRespuestaComentario.class);
intent.setFlags(intent.FLAG\u活动\u多任务);
intent.setFlags(intent.FLAG\u活动\u新任务);
intent.putExtra(“nombredestinario”,nombre.getText());
mcontext.startActivity(意图);
}
});
返回v;
}
}

我在“Comentario”课程中对listview的每个元素进行了思考,但没有仔细考虑按钮,问题可能就在那里,但我不知道我必须将每个元素的onclicklistener正确地回答其所有者

我想你有你需要帮助我的所有人,如果没有,请告诉我,我会张贴它。
谢谢。

更改以下方法

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


这应该是可行的。

如果您想单击listview的小部件,那么您必须在适配器类中提到使用适配器类的xml类定义它们的位置。

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

谢谢,但它不起作用。我会在邮政编码上加上这个变化。我不明白你的意思。这些按钮是“comentario”类的属性,它们在适配器和列表的xml元素上定义。问题出在哪里?问题是当我按下“Responder”按钮时,这对列表中的第一个人回答,对我按下按钮的人回答“否”。因为您没有传递listview按钮的位置。您必须在单击时传递该位置。我认为,当您按下listview中某个元素的按钮时,该按钮对应于该元素。我将要回答的元素的名称传递给onclick侦听器,但我做得不好。我不知道怎么做。
@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}