Android 如何在getView方法中通过单击按钮控制textview

Android 如何在getView方法中通过单击按钮控制textview,android,Android,我的应用程序有Listview,Listview项目有一个文本视图和一个按钮和其他图像等。。。 我使用的是ViewHolder模式 我想在单击按钮时更改TextView中的文本 如何在单击按钮时控制TextView public class AListAdapter extends ArrayAdapter<MyData> { static class ViewHolder { TextView viewCountView; Image

我的应用程序有Listview,Listview项目有一个文本视图和一个按钮和其他图像等。。。 我使用的是ViewHolder模式

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

如何在单击按钮时控制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;
    }
公共类AListAdapter扩展了ArrayAdapter{
静态类视窗夹{
文本视图视图countview;
图像按钮myButton;
ImageView配置文件ImageView;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
最终AListAdapter=此;
ViewHolder=null;
if(convertView==null){
convertView=充气机充气(R.layout.cell父项,false);
TextView viewCountView=(TextView)convertView.findViewById(R.id.\u view\u count);
Button likeButton=(ImageButton)convertView.findViewById(R.id._like_按钮);
LoadImageView profileImageView=(LoadImageView)convertView.findViewById(R.id.albumlist\u profile\u image);
holder=新的ViewHolder();
holder.viewCountView=viewCountView;
holder.likeButton=likeButton;
holder.profileImageView=profileImageView;
holder.likeButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//如何控制文本视图??????????????????
//单击“我想更改文本视图”时
//像holder.viewCountView.setText(“单击”);
}
});
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
MyData=(MyData)adapter.getItem(位置);
如果(数据!=null){
holder.viewCountView.setText(String.valueOf(data.viewCount)+“views”);
//图像设置
}
返回视图;
}

在这种情况下,当调用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");
    }
});

在这种情况下,您无法访问或使用局部变量。在调用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");
    }
});
将此代码放在else()部分之后

这样

  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;
将此代码放在else()部分之后

这样

  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;

此viewCountView中有什么问题。setText(“单击”);此代码面临的错误是什么?此作用域无法访问viewHolder此viewCountView中有什么问题。setText(“单击”);此代码面临的错误是什么?此作用域无法访问viewHolder我尝试了您的答案,在“viewHolder mH=(ViewHolder)v.getTag();`我不确定这为什么不起作用,它应该能起作用。我以前用过它,你的代码看起来也不错。你能修复这个小错误,然后再试一次吗?(
Button likeButton=(ImageButton)convertView.findViewById(R.id.\u like_Button)
),它应该是像按钮一样的
ImageButton=…
或两侧的按钮,这取决于您在xml代码中如何定义它。我会再试一次,成功。我不知道为什么不起作用……但感谢Ahmed!!!!!我尝试了您的答案,在“ViewHolder mH=(ViewHolder)v.getTag()上获取ClassCastExection`我不确定为什么这不起作用,它应该会起作用。我以前用过它,你的代码看起来也不错。你能修复这个小错误并重试吗?(
Button likeButton=(ImageButton)convertView.findViewById(R.id.\u like_Button)
),它应该是
ImageButton likeButton=…
或两侧的按钮,这取决于您在xml代码中如何定义它。我将再次尝试,成功。我不知道为什么不起作用…但感谢Ahmed!!!!!我尝试了您的,出现错误“无法在用不同方法定义的内部类中引用非最终变量variableName”我尝试了你的,得到错误“不能引用在不同方法中定义的内部类中的非最终变量variableName”