【问题标题】:Inflater button click listener not work充气按钮点击监听器不起作用
【发布时间】:2015-05-13 10:30:10
【问题描述】:

我有一个自定义列表视图,我想将点击监听器添加到 Button ui 对象中,但它不起作用,请查看我的以下代码并建议我一些解决方案。

package com.example.dynamicbutton;

import java.util.ArrayList;

import android.annotation.SuppressLint;
import android.app.Activity; 
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;

public class CustomAdapter extends BaseAdapter {

      Activity activity;
      ArrayList<String> name;

      ViewHolder holder;

public CustomAdapter(Activity activity, ArrayList<String> name) {
    this.activity = activity;
    this.name = name;
}

@Override
public int getCount() {
    return name.size();
}

@Override
public Object getItem(int position) {
    return name.get(position);
}

@Override
public long getItemId(int position) {
    return name.size();
}

public class ViewHolder {
    TextView fruitName;
    Button btnStatus;
}

@SuppressLint("ViewHolder") 
@Override
public View getView(int position, View convertView, ViewGroup parent) {



    if (convertView == null) { 
        LayoutInflater mInflater = (LayoutInflater)activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.activity_custom_layout, parent, false);

        holder = new ViewHolder();

        holder.fruitName = (TextView)convertView.findViewById(R.id.fruit_name);
        holder.btnStatus = (Button)convertView.findViewById(R.id.btn_status);

        holder.btnStatus.setText("Like");
        holder.fruitName.setText(name.get(position));

        convertView.setTag(holder);
    }else {
        holder = (ViewHolder) convertView.getTag();
    }
        holder.btnStatus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (holder.btnStatus.getText().toString().equals("Like")) {
                    holder.btnStatus.setText("Unlike");
                }else{
                    holder.btnStatus.setText("Like");
                }
            }
        });

    return convertView;

} }

因此,在此 BaseAdapter 中,我想将侦听器提供给 holder.btnStatus,但在列表中,侦听器仅在一行上工作,我想动态地为侦听器提供。 请仔细阅读我的代码并建议我一些解决方案。

【问题讨论】:

  • 你在哪里使用ViewHolder setTag()getTag()
  • 感谢您的回复,抱歉我也不知道如何在 ViewHolder 中使用 setTag() 和 getTag()
  • 如果你能帮我解决这个问题,那就太好了。

标签: android listview button onclicklistener baseadapter


【解决方案1】:

改变这个

LayoutInflater mInflater = (LayoutInflater)activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.activity_custom_layout, parent, false);

holder = new ViewHolder();

holder.fruitName = (TextView)convertView.findViewById(R.id.fruit_name);
holder.btnStatus = (Button)convertView.findViewById(R.id.btn_status);

holder.btnStatus.setText("Like");
holder.fruitName.setText(name.get(position));

 if (convertView == null) { 
 LayoutInflater mInflater = (LayoutInflater)activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
 convertView = mInflater.inflate(R.layout.activity_custom_layout, parent, false);

 holder = new ViewHolder();

holder.fruitName = (TextView)convertView.findViewById(R.id.fruit_name);
holder.btnStatus = (Button)convertView.findViewById(R.id.btn_status);

holder.btnStatus.setText("Like");
holder.fruitName.setText(name.get(position));

convertView.setTag(holder);
}
else holder = (ViewHolder) convertView.getTag();

编辑2

holder.btnStatus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (holder.btnStatus.getText().toString().equals("Like")) {
                holder.btnStatus.setText("Unlike");
            }else{
                holder.btnStatus.setText("Like");
            }
        }
    });

final ViewHolder holder_fin = holder;

holder_fin.btnStatus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (holder_fin.btnStatus.getText().toString().equals("Like")) {
                holder_fin.btnStatus.setText("Unlike");
            }else{
                holder_fin.btnStatus.setText("Like");
            }
        }
    });

【讨论】:

  • 感谢我替换为您的代码,但结果相同,请再次查看我的代码,我已发布代码。
  • 只有在列表中没有例外,侦听器仅针对一行工作,如果您单击任何按钮,侦听器仅针对一行工作。我想为单个按钮提供单个侦听器。
  • 是的..它与旧的类型相同.. holder_fin 将只有一个持有人用于一个职位。
  • 如果我的回答有效,请接受我的回答。你只需点击我回答的勾号
  • 很抱歉,兄弟我没有那么高的声誉来回答你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
相关资源
最近更新 更多