Android 如何访问不同列表视图行中的按钮?

Android 如何访问不同列表视图行中的按钮?,android,listview,view,custom-adapter,Android,Listview,View,Custom Adapter,我试图通过单击按钮来更改listview行中按钮的颜色。这里我有一个由25行组成的列表视图,每行包含一个按钮。我使用了listview的自定义适配器在每一行中放置按钮。我想知道如何做以下事情: 点击一个按钮,它的颜色就会改变 在步骤(1)之后,onClickListener还将listview中剩余按钮的颜色更改为正常 以上两个步骤应适用于所有按钮,这意味着如果单击任何按钮,则应将其着色,其余按钮将恢复正常 listview类似于 按钮1 按钮2 按钮3 按钮4您必须从适配器访问您的按钮

我试图通过单击按钮来更改listview行中按钮的颜色。这里我有一个由25行组成的列表视图,每行包含一个按钮。我使用了listview的自定义适配器在每一行中放置按钮。我想知道如何做以下事情:

  • 点击一个按钮,它的颜色就会改变
  • 在步骤(1)之后,onClickListener还将listview中剩余按钮的颜色更改为正常
  • 以上两个步骤应适用于所有按钮,这意味着如果单击任何按钮,则应将其着色,其余按钮将恢复正常
  • listview类似于


    按钮1
    按钮2
    按钮3

    按钮4您必须从适配器访问您的按钮。跟随它-

    public class TestAdapter extends BaseAdapter {
        private Context ctx;
        private List<TestList> list;
    
        public TestAdapter(Context ctx, List<TestList> list){
            this.ctx = ctx;
            this.list = list;
        }
    
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public TestList getItem(int position) {
    
            return list.get(position);
        }
    
        @Override
        public long getItemId(int position) {
    
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            if (convertView == null) {
                LayoutInflater layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = layoutInflater.inflate(R.layout.layout_item, parent, false);
            }
    
            Button button = (Button) convertView.findViewById(R.id.button);
    
    
            button.setText(list.get(position));
    
    
            return  convertView;
        }
    }
    
    公共类TestAdapter扩展了BaseAdapter{
    私有上下文ctx;
    私人名单;
    公共测试适配器(上下文ctx,列表){
    this.ctx=ctx;
    this.list=列表;
    }
    @凌驾
    public int getCount(){
    返回list.size();
    }
    @凌驾
    公共测试列表getItem(int位置){
    返回列表。获取(位置);
    }
    @凌驾
    公共长getItemId(int位置){
    返回位置;
    }
    @凌驾
    公共视图getView(int位置、视图转换视图、视图组父视图){
    if(convertView==null){
    LayoutInflater LayoutInflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
    convertView=LayoutFlater.充气(R.layout.layout_项,父项,false);
    }
    Button Button=(Button)convertView.findViewById(R.id.Button);
    button.setText(list.get(position));
    返回视图;
    }
    }
    
    在自定义适配器中使用onclick listener for按钮

    public class CustomAdapter extends BaseAdapter {
        private Context ctx;
        private List<CustomList> list;
    
        public CustomAdapter(Context ctx, List<CustomList> list){
            this.ctx = ctx;
            this.list = list;
        }
    
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public CustomList getItem(int position) {
    
            return list.get(position);
        }
    
        @Override
        public long getItemId(int position) {
    
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            if (convertView == null) {
                LayoutInflater layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = layoutInflater.inflate(R.layout.layout_item, parent, false);
            }
    
            Button button = (Button) convertView.findViewById(R.id.button);
    
            button.setText(list.get(position));
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    \\change color here
                }
            });
    
            return  convertView;
            }
        }
    
    公共类CustomAdapter扩展了BaseAdapter{
    私有上下文ctx;
    私人名单;
    公共CustomAdapter(上下文ctx,列表){
    this.ctx=ctx;
    this.list=列表;
    }
    @凌驾
    public int getCount(){
    返回list.size();
    }
    @凌驾
    公共CustomList getItem(内部位置){
    返回列表。获取(位置);
    }
    @凌驾
    公共长getItemId(int位置){
    返回位置;
    }
    @凌驾
    公共视图getView(int位置、视图转换视图、视图组父视图){
    if(convertView==null){
    LayoutInflater LayoutInflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
    convertView=LayoutFlater.充气(R.layout.layout_项,父项,false);
    }
    Button Button=(Button)convertView.findViewById(R.id.Button);
    button.setText(list.get(position));
    setOnClickListener(新视图.OnClickListener(){
    @凌驾
    公共void onClick(视图){
    \\在这里换颜色
    }
    });
    返回视图;
    }
    }
    
    添加到目前为止的工作!请发布您的代码请显示您的适配器我有类似的适配器,但它只会更改单击按钮的颜色,但不会使其他按钮恢复正常。