zoukankan      html  css  js  c++  java
  • CheckBox in ListView

    CheckBox in ListView

    Listview 在android中是经常用的组件,一些特殊情况下,系统提供的list view item 不够用, 不能满足需求,那么就需要自定义listView。 

    如果在listview的item里面需要有一个CheckBox 和 2 个 TextView(like gmail app list item),那么需要自定义list item layout和自定义adapter。
    有个简单list item(例子里面只显示一行内容):
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center_vertical"
        android:padding="5dp" >
    
        <CheckBox
            android:id="@+id/checkBox1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:focusable="false"
            android:text="" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="74dp"
            android:layout_toRightOf="@+id/checkBox1"
            android:text="" />
    
    </RelativeLayout>

    当一个list view 的item里面有Button 或者是CheckBox等空间,会导致listView的ItemSelected方法失效。
    为了解决这个问题需要在Button或者是CheckBox里面添加一行设置:
    android:focusable="false"
    这样事件才能传递到List view 的item。

    在上面的例子中有一个CheckBox,在自定义的adapter里面,要对CheckBox的focus Change事件监听,需要通过OnClickListener事件实现。

     private ListAdapter adapter = new ListAdapter(){
    
    	@Override
    	public void registerDataSetObserver(DataSetObserver observer) {
    	    
    	}
    
    	@Override
    	public void unregisterDataSetObserver(DataSetObserver observer) {
    	    
    	}
    
    	@Override
    	public int getCount() {
    	    return data.size();
    	}
    
    	@Override
    	public Object getItem(int position) {
    	    return data.get(position);
    	}
    
    	@Override
    	public long getItemId(int position) {
    	    return position;
    	}
    
    	@Override
    	public boolean hasStableIds() {
    	    return true;
    	}
    
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
    	    LayoutInflater inflater = (LayoutInflater)ListViewTest.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
    	    final View view = inflater.inflate(R.layout.layout_listview_item_select_multi_1, null) ;
    	    TextView tv = (TextView)view.findViewById(R.id.textView1) ;
    	    tv.setText(data.get(position)) ;
    	    CheckBox cb = (CheckBox)view.findViewById(R.id.checkBox1) ;
    	    cb.setOnClickListener(new View.OnClickListener() {
    		@Override
    		public void onClick(View v) {
    		    CheckBox cb = (CheckBox)v ;
    		    if(cb.isChecked()){
    			view.setBackgroundResource(R.drawable.list_selector2) ;
    		    }else{
    			view.setBackgroundResource(R.drawable.list_selector3) ;
    		    }
    		}
    	    }) ;
    	    return view;
    	}
    
    	@Override
    	public int getItemViewType(int position) {
    	    return 0;
    	}
    
    	@Override
    	public int getViewTypeCount() {
    	    return 1;
    	}
    
    	@Override
    	public boolean isEmpty() {
    	    return false;
    	}
    
    	@Override
    	public boolean areAllItemsEnabled() {
    	    return true;
    	}
    
    	@Override
    	public boolean isEnabled(int position) {
    	    return true;
    	}
    	
        } ;
    当然重写Adapter,不必实现 ListAdapter.   继承BaseAdaper 或者她的子类就行。
























  • 相关阅读:
    python自定义线程池
    sudo: ulimit: command not found
    HTTP长连接、短连接使用及测试
    5分钟上手:本地开发环境启动HTTPS
    Python复杂对象转JSON
    Python自定义注解
    gcc makefile
    Ubuntu 13.10 安装 ia32-lib
    vim扩展配置
    python异常类型
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3146734.html
Copyright © 2011-2022 走看看