【问题标题】:How to controll textview by Button OnClick in getView method如何通过getView方法中的Button OnClick控制textview
【发布时间】:2013-03-12 06:04:42
【问题描述】:

我的应用程序有 Listview,Listview 项目有一个 TextView 和一个 Button 和其他图像等... 我使用 ViewHolder 模式。

我想在点击按钮时更改 TextView 中的文本

如何在Buttons Onclick中控制TextView?

 public class AListAdapter extends ArrayAdapter<MyData> {

    static class ViewHolder {

        TextView viewCountView;

        ImageButton myButton;

        ImageView profileImageView;

    }

    public View getView(int position, View convertView, ViewGroup parent) {
        final AListAdapter adapter = this;
        ViewHolder holder = null;


        if (convertView == null) {
            convertView = inflater.inflate(R.layout.cell parent, false);
            TextView viewCountView = (TextView) convertView.findViewById(R.id._view_count_);
            Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button);
            LoadImageView profileImageView = (LoadImageView) convertView.findViewById(R.id.albumlist_profile_image);

            holder = new ViewHolder();
            holder.viewCountView = viewCountView;
            holder.likeButton = likeButton;
            holder.profileImageView = profileImageView;

            holder.likeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   // how to controll TextView??????????????????
               // when click i want to change textview
                   //like holder.viewCountView.setText("clicked");
                }
            });

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        MyData data = (MyData) adapter.getItem(position);
        if (data != null) {

            holder.viewCountView.setText(String.valueOf(data.viewCount) + "views");
            //image settings 
        }
        return convertView;
    }

【问题讨论】:

  • 这个视图有什么问题CountView.setText("clicked");
  • 您在使用此代码时遇到了哪些错误?
  • viewHolder 无法被此范围访问

标签: android


【解决方案1】:

在这种情况下,您无法访问使用局部变量,当调用 onClickListener 时,变量将超出范围。

因此,您也可以将ViewHolder 设置为按钮的标签,然后您可以在onClick 处理程序中访问它

holder.likeButton.setTag(holder);
holder.likeButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       ViewHolder mH = (ViewHolder) v.getTag();

       mH.viewCountView.setText("clicked");
    }
});

【讨论】:

  • 我试过你的答案,在'ViewHolder mH = (ViewHolder) v.getTag();上得到ClassCastExeption;`
  • 我不知道为什么这不起作用,它应该起作用。我以前用过它,你的代码看起来也很好。你能解决这个小错误并尝试吗? (Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button)),应该是ImageButton likeButton = ...
  • 或两侧的按钮,取决于您在 xml 代码中的定义方式
  • 我会再试一次,成功了。我不明白为什么不工作....但感谢艾哈迈德!!!!!!!
【解决方案2】:

将此代码放在 else() 部分之后

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

               holder.viewCountView.setText("clicked");
            }
        });

这样

  if (convertView == null) {
        convertView = inflater.inflate(R.layout.cell parent, false);
        TextView viewCountView = (TextView) convertView.findViewById(R.id._view_count_);
        Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button);
        LoadImageView profileImageView = (LoadImageView) convertView.findViewById(R.id.albumlist_profile_image);

        holder = new ViewHolder();
        holder.viewCountView = viewCountView;
        holder.likeButton = likeButton;
        holder.profileImageView = profileImageView;

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

    MyData data = (MyData) adapter.getItem(position);
    if (data != null) {

        holder.viewCountView.setText(String.valueOf(data.viewCount) + "views");
        //image settings 
    }


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

           holder.viewCountView.setText("clicked");
        }
    });
    return convertView;

【讨论】:

  • 我试过你的,得到错误“不能在一个不同的方法定义的内部类中引用非最终变量 variableName”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多