【问题标题】:How to access button in different listview rows?如何访问不同列表视图行中的按钮?
【发布时间】:2017-02-22 12:53:21
【问题描述】:

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

  1. 点击一个按钮,它的颜色就会改变。
  2. 在步骤 (1) 之后,onClickListener 还会将列表视图中剩余按钮的颜色更改为正常颜色。
  3. 上述两个步骤应该发生在所有按钮上,这意味着如果单击任何一个按钮,则它应该是彩色的,其余的将恢复正常。

列表视图就像


按钮 1


按钮 2


按钮 3


按钮 4

【问题讨论】:

  • 添加您目前的作品!
  • 请发布您的代码
  • 请出示您的适配器

标签: android listview view custom-adapter


【解决方案1】:

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

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;
    }
}

【讨论】:

    【解决方案2】:

    对自定义适配器中的按钮使用 onclick 侦听器

    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;
            }
        }
    

    【讨论】:

    • 我有类似的适配器,但它只会改变点击按钮的颜色,但不会让其他按钮恢复正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2013-05-13
    • 1970-01-01
    • 2018-02-22
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多