欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

listview设置不同背景图片并添加selector,listviewselector

来源: 开发者 投稿于  被查看 1041 次 评论:226

listview设置不同背景图片并添加selector,listviewselector


前段时间为了实现根据item不同的内容实现不同的背景色google了好久只找到了个隔行换色,通过自定义SimpleAdapter终于实现了此功能,但是定义了selector并没有触发点击效果。今天重新想了一遍终于把这个问题解决了。在自定义的getView里就给每个convertView定义它的背景色和selector。

1.自定义SimpleAdapter

    public class MySimpleAdapter extends BaseAdapter {
        private LayoutInflater mInflater;

        private List<HashMap<String, Object>> dataList;

        public MySimpleAdapter(Context context, List<HashMap<String, Object>> data) {
            mInflater = LayoutInflater.from(context);
            this.dataList = data;
        }

        @Override
        public int getCount() {
            return dataList.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.color_list_item, null);
                holder = new ViewHolder();
                holder.blue = (TextView)convertView.findViewById(R.id.blue_item);
                holder.red = (TextView)convertView.findViewById(R.id.red_item);
                holder.green = (TextView)convertView.findViewById(R.id.green_item);
                holder.yellow = (TextView)convertView.findViewById(R.id.yellow_item);

                convertView.setTag(holder);

            } else {
                holder = (ViewHolder)convertView.getTag();

            }
            holder.blue.setText((CharSequence)dataList.get(position).get("blue"));
            holder.red.setText((CharSequence)dataList.get(position).get("red"));
            holder.green.setText((CharSequence)dataList.get(position).get("green"));
            holder.yellow.setText((CharSequence)dataList.get(position).get("yellow"));
            if ("blue".equals(dataList.get(position).get("status").toString())) {
                convertView.setBackgroundResource(R.drawable.item_chang_blue);
            } else if ("red".equals(dataList.get(position).get("status").toString())) {
                convertView.setBackgroundResource(R.drawable.item_chang_red);
            } else if ("green".equals(dataList.get(position).get("status").toString())) {
                convertView.setBackgroundResource(R.drawable.flightinfo_item_chang_green);
            } else if ("yellow".equals(dataList.get(position).get("status").toString())) {
                convertView.setBackgroundResource(R.drawable.flightinfo_item_chang_yellow);
            } 
            return convertView;
        }

        @Override
        public void notifyDataSetChanged() {
            super.notifyDataSetChanged();
        }

        class ViewHolder {
            TextView blue;
            TextView red;
            TextView green;
            TextView yellow;
        }
        
    }

2.选择器item_chang_blue.xml 其他同理

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    
<!-- 非触摸模式下获得焦点并单击时的背景图片 -->  
 <item
    android:state_focused="true"
    android:state_pressed="true"
 android:drawable= "@drawable/list_item_pressed"/>   
<!-- 触摸模式下单击时的背景图片 -->
  
  <item  
 android:state_focused="false"  
    android:state_pressed="true"    
    android:drawable="@drawable/list_item_pressed" />  


<!--选中时的图片背景  -->  
 <item
 android:state_selected="true"
    android:drawable="@drawable/list_item_pressed"/>  
<!--获得焦点时的图片背景  -->  
 <item
    android:state_focused="true"
    android:drawable="@drawable/list_item_pressed"/> 
    <!--默认背景  -->  ​
    <item android:drawable="@drawable/status_blue" />
</selector>
​​

用户评论