更改按钮上的标签文本单击列表视图项内

Posted

技术标签:

【中文标题】更改按钮上的标签文本单击列表视图项内【英文标题】:change label text on button click inside a listview item 【发布时间】:2015-12-03 21:09:22 【问题描述】:

我有一个 listview 项目,一个 label 和两个 buttons。我试图更改按钮单击时的标签。但它正在更改另一个列表视图项上的文本。不是带有按钮的标签。我使用自定义列表适配器做到了这一点。我试过了,如下所示,

@Override
public View getView(int position, View convertView, ViewGroup parent) 
    final MenuItem listItem = objects.get(position);

    if (convertView == null) 
        LayoutInflater inflater = (LayoutInflater) this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.menu_list_item, null);

        btnPlus = (ButtonRectangle) convertView.findViewById(R.id.buttonPlus);
        btnPlus.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                int i = 0;
                cartQtyTextView.setText("" + ++i);

            
        );
    

我该如何解决这个问题?

【问题讨论】:

你可以用回收站视图替换列表视图吗? 您是否创建了一个持有人?对于TextView和按钮? @RKNP ListView 有什么问题?不能用 ListView 做吗? @RKNP - 我没有名为 recycler view 的视图。 @nicholas - 不。 你在哪里定义 cartQtyTextView 【参考方案1】:

您可能想要创建持有人。 由于我没有看到您使用它,因此我没有包含您的菜单项代码。

public class Holder 
    ButtonRectangle buttonPlus;
    TextView cartQtyTextView;


@Override
public View getView(int position, View convertView, ViewGroup parent) 
    // Get Holder
    final Holder holder = new Holder();

    // Change Layout
    LayoutInflater inflater = (LayoutInflater) this.context
                              .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.menu_list_item, null);

    // Find Control
    holder.buttonPlus = (ButtonRectangle)view.findViewById(R.id.buttonPlus);
    holder.cartQtyTextView = (TextView)view.findViewById(R.id.cartQtyTextView);

    // Check & Set
    if (holder.buttonPlus != null) 
        holder.buttonPlus.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                int i = 0;
                if (holder.cartQtyTextView != null) 
                    holder.cartQtyTextView.setText("" + ++i);
                
            
        );
    

    return view;

【讨论】:

谢谢。这行得通..这里发生了什么?(与持有人) 您可能想为持有人developer.android.com/intl/ja/training/improving-layouts/… 阅读此内容。 嗯,您可以将您的代码更新为扩展适配器的完整代码吗?【参考方案2】:

这是因为您将侦听器设置在 if(convertView==null) 内。

因此,只有在创建视图后才设置监听器,但是当您滚动时,列表视图正在重用隐藏项,但由于 convertView 不为空,它会保留第一个分配的监听器。

您需要在 if 之外设置您的 onClickListener。如果您使用holder 以获得更好的性能,那就更好了

【讨论】:

【参考方案3】:
public class ExampleAdapter extends ArrayAdapter<MenuItem> 

private Activity activity;
private int resource;
private List<MenuItem> objects;

public ExampleAdapter(Activity activity, int resource, List<MenuItem> objects) 
    super(activity, resource, objects);

    this.activity = activity;
    this.resource = resource;
    this.objects= objects;


@Override
public View getView(int position, View convertView, ViewGroup parent) 

    MenuItem listItem = objects.get(position);
    ViewHolder holder = null;

    if (convertView == null) 

        holder = new ViewHolder();
        LayoutInflater li = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = li.inflate(resource, parent, false);

        holder.labelTextView= (TextView) convertView.findViewById(R.id.labelTextView);
        holder.btnPlus= (ButtonRectangle) convertView.findViewById(R.id.buttonPlus);

        convertView.setTag(holder);

     else 

        holder = (ViewHolder) convertView.getTag();
    

    holder.btnPlus.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            int i = 0;
            holder.labelTextView.setText("" + ++i);

        
    );

    return convertView;


static class ViewHolder 

    TextView labelTextView;
    ButtonRectangle btnPlus;


【讨论】:

这是nicholas 答案的副本.. 没有新东西要学习.. 谢谢顺便说一句

以上是关于更改按钮上的标签文本单击列表视图项内的主要内容,如果未能解决你的问题,请参考以下文章

Android:从自定义列表视图中单击的按钮获取列表视图项目

android在单击按钮时更改列表视图内的图像视图

在表格视图单元格按钮上查看表格视图单元格文本

将列表框项内的命令绑定到视图模型父级上的属性

带有按钮的表视图,可根据用户输入更改标签

滚动列表视图时文本视图中的数据切换