ListView某一行被选中后显示不同的样式

参考自android listview选中某一行,成选中状态颜色高亮显示 对文章中的内容进行了简单的编辑和提取

实现的总体步骤:
1)写Adapter,在Adpater中设置一个标识被选中数据位置的属性,以及一个设置该属性的set方法
2)为ListView写条目监听器(OnItemClickListener),点击时调用适配器中设置选中数据位置的方法,随后调用适配器的notifyDatasetInvalidated方法刷新一下ListView
核心代码如下:

public class MyAdapter extends BaseAdapter{

    ...

    int selectItem;//用来标识被选中数据源的位置

    public MyAdapter( Context context,List<String> datas) {
        ...
        selectItem = -1;//初始时设置值为-1
    }

   ...//getCount() getItem() getItemId()方法

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

    ... //ViewHolder赋值
        String s = getItem(position);
        vh.tv.setText(s);
        if(position==selectItem){
            //如果第position位置的数据为当前点击选中的位置则使用R.drawable.list_underline背景
            vh.tv.setBackgroundResource(R.drawable.list_underline);
        }else{
            ///如果第position位置的数据不是当前选中的位置则使用纯白色作为背景
            vh.tv.setBackgroundColor(Color.WHITE);
        }
        return convertView;
    }
    //adapter暴露给外界用来设定用户点击位置的API
    public void setSelectItem( int position){
        this.selectItem = position;
    }

    ... //ViewHolder内部类

在Activity中为ListView添加条目监听:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                adapter.setSelectItem(position);
                adapter.notifyDataSetInvalidated();
            }
        });

在条目监听内部调用适配器的setSelectItem方法,然后刷新ListView引起适配器中getView方法的重新执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值