Android 从适配器中的onclick listener获取listiview对象
您好,我有一个带有适配器和对象类的Android 从适配器中的onclick listener获取listiview对象,android,listview,adapter,Android,Listview,Adapter,您好,我有一个带有适配器和对象类的listview,每个listview位置都有一个按钮,适配器中有一个clicklistener,但是当我在listview中单击我的按钮时,它返回最后一个项目位置 这是我的适配器: public class comentario_adapter extends BaseAdapter { protected Activity activity; protected ArrayList<comentario_obj> items;
listview
,每个listview位置都有一个按钮,适配器中有一个clicklistener,但是当我在listview
中单击我的按钮时,它返回最后一个项目位置
这是我的适配器:
public class comentario_adapter extends BaseAdapter {
protected Activity activity;
protected ArrayList<comentario_obj> items;
private Context mContext;
comentario_obj prod;
ImageButton correcta;
boolean marcada = false;
View vi;
public comentario_adapter(Activity activity, ArrayList<comentario_obj> items, Context context) {
this.activity = activity;
this.items = items;
this.mContext=context;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
vi=convertView;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.comentario_adapter, null);
}
prod = items.get(position);
TextView title_coment = (TextView) vi.findViewById(R.id.title_coment);
ImageButton voteup= (ImageButton) vi.findViewById(R.id.voteup);
ImageButton votedown= (ImageButton) vi.findViewById(R.id.votedown);
title_coment.setText(prod.getTitulo());
ImageButton btn=(ImageButton)vi.findViewById(R.id.correcta);
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if(mContext instanceof verPregunta_class){
((verPregunta_class) mContext).MyMethod();
//NEED THE TITLE OF LISTVIEW POSITION CLICKED
}
}
});
return vi;
}
public interface IMethodCaller{
void MyMethod();
}
}
公共类comentario_适配器扩展BaseAdapter{
受保护的活动;
受保护的ArrayList项;
私有上下文;
comentario_obj产品;
图像按钮校正;
布尔值marcada=false;
视图六;
公共comentario_适配器(活动、ArrayList项、上下文){
这个。活动=活动;
这个项目=项目;
this.mContext=上下文;
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int位置){
返回项目。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
vi=转换视图;
if(convertView==null){
LayoutInflater充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u服务);
vi=充气机。充气(R.layout.comentario_适配器,空);
}
prod=items.get(位置);
TextView title\u coment=(TextView)vi.findViewById(R.id.title\u coment);
ImageButton voteup=(ImageButton)vi.findViewById(R.id.voteup);
ImageButton votedown=(ImageButton)vi.findViewById(R.id.votedown);
title_coment.setText(prod.getitulo());
ImageButton btn=(ImageButton)vi.findViewById(R.id.correcta);
btn.setOnClickListener(新建按钮.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(verPregunta_类的mContext实例){
((verPregunta_类)mContext.MyMethod();
//需要单击LISTVIEW位置的标题吗
}
}
});
返回vi;
}
公共接口IMethodCaller{
void MyMethod();
}
}
例如,您可以在OnCreate中为listview创建一个方法setOnItemClickListener,并在其内部询问项目在项目数组中的位置。比如说,
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int pos, long id) {
String titulo = array.get(pos).getTitulo();
}
listview.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
int pos,长id){
字符串titulo=array.get(pos.getitulo();
}
希望能有帮助
再见
}); 好的,我已经用setTag
找到了解决方案:
public class comentario_adapter extends BaseAdapter {
protected Activity activity;
protected ArrayList<comentario_obj> items;
private Context mContext;
comentario_obj prod;
ImageButton correcta;
boolean marcada = false;
View vi;
public comentario_adapter(Activity activity, ArrayList<comentario_obj> items, Context context) {
this.activity = activity;
this.items = items;
this.mContext=context;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
vi=convertView;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = inflater.inflate(R.layout.comentario_adapter, null);
}
prod = items.get(position);
TextView title_coment = (TextView) vi.findViewById(R.id.title_coment);
ImageButton voteup= (ImageButton) vi.findViewById(R.id.voteup);
ImageButton votedown= (ImageButton) vi.findViewById(R.id.votedown);
title_coment.setText(prod.getTitulo());
final ImageButton btn=(ImageButton)vi.findViewById(R.id.correcta);
**btn.setTag(prod.getId());**
btn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
if(mContext instanceof verPregunta_class){
((verPregunta_class) mContext).MyMethod();
**String title = (String) v.getTag();**
}
}
});
return vi;
}
public interface IMethodCaller{
void MyMethod();
}
}
公共类comentario_适配器扩展BaseAdapter{
受保护的活动;
受保护的ArrayList项;
私有上下文;
comentario_obj产品;
图像按钮校正;
布尔值marcada=false;
视图六;
公共comentario_适配器(活动、ArrayList项、上下文){
这个。活动=活动;
这个项目=项目;
this.mContext=上下文;
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int位置){
返回项目。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
vi=转换视图;
if(convertView==null){
LayoutInflater充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u服务);
vi=充气机。充气(R.layout.comentario_适配器,空);
}
prod=items.get(位置);
TextView title\u coment=(TextView)vi.findViewById(R.id.title\u coment);
ImageButton voteup=(ImageButton)vi.findViewById(R.id.voteup);
ImageButton votedown=(ImageButton)vi.findViewById(R.id.votedown);
title_coment.setText(prod.getitulo());
最终图像按钮btn=(图像按钮)vi.findViewById(R.id.correcta);
**btn.setTag(prod.getId())**
btn.setOnClickListener(新建按钮.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(verPregunta_类的mContext实例){
((verPregunta_类)mContext.MyMethod();
**字符串标题=(字符串)v.getTag()**
}
}
});
返回vi;
}
公共接口IMethodCaller{
void MyMethod();
}
}
谢谢大家 简单的方法:制作prod
localfinal或使用View.Tag。。。baziilion Times问道,也可以使用谷歌。是的,但是我和这个标签有什么关系?嗯,适配器内部也应该有同样的想法。你试过了吗?但是你有这个位置,所以理论上你可以做items.get(post).getitulo()不是吗?是的,但那会抛出'java.lang.IndexOutOfBoundsException:索引1无效,大小为0'。我想问题出在getView中。试着像这里这样做,然后重试items.get(post.getitulo()。祝你好运