自定义ListView更改项目颜色

时间:2016-04-16 11:54:46

标签: android

我有ListView自定义适配器,我想更改项目的背景颜色。我用了这段代码:

 @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final Holder holder = new Holder();
        final View rowView;
        rowView = inflater.inflate(R.layout.program_list, null);
        holder.tv = (TextView) rowView.findViewById(R.id.textView1);
        holder.img = (ImageView) rowView.findViewById(R.id.imageView1);
        holder.tv.setText(result[position]);
        holder.img.setImageResource(imageId[position]);
        rowView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (position != 0) {
                    rowView.setBackgroundColor(Color.rgb(70, 190, 200));
                }
            }
        });
        return rowView;
    }

它运行正常,但我的问题是 - 如何知道最后一项不会被按下(导致越界错误),我如何更改onclick函数中的下一项颜色? (如果我按下位置​​4处的项目,则更改位置5的背景颜色。)

          rowView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
            // ?
            }
        });

谢谢:)

1 个答案:

答案 0 :(得分:1)

如果您在适配器中将myListView声明为成员变量,并在getView方法中将其初始化为

this.myListView = (ListView) parent;

然后您通过

获取onClick方法中当前所选项目的位置
int currPos = MyCustomAdapter.this.myListView(getPositionForView((View) view.getParent()));

到目前为止,我自己使用过此代码,并且可以正常使用。现在,根据Android Javadoc,以下表达式应该产生下一个视图:

MyCustomAdapter.this.myListView(getChildAt(currPos + 1)).

然后你应该能够用这个观点做任何你想做的事情,但我还没有测试过这个部分。