ListView-Arrayadapter

ListView用多了,自然而然想去抽时间总结一下,毕竟copy来copy去,久而久之也会也淡忘,勒个时候再去花时间去阅读自己写过的代码,太不明智,也费时间。在这里我把用过的ListView都拿出来与大家分享。持续更新附源码。 


一:分别继承于Activity,ListActivity,ListView使用 
   
   1)继承于Activity写法 


Java代码  
public class ListView_ArrayAdapterActivity extends Activity {  
      
    private ListView listView;  
    private ArrayList<String> list=new ArrayList<String>();    
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        listView = (ListView) findViewById(R.id.listView);  
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());    
        listView.setAdapter(adapter);  
    }  
      
    public List<String> getListData(){  
        list.add("Item 1");  
        list.add("Item 2");  
        list.add("Item 3");  
        list.add("Item 4");  
        list.add("Item 5");  
        return list;  
    }  
  
}  


   2)继承于ListActivity写法 
    
Java代码  
public class ListView_ArrayAdapterActivity extends ListActivity {  
      
    private ArrayList<String> list=new ArrayList<String>();    
      
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());    
        setListAdapter(adapter);  
    }  
      
    public List<String> getListData(){  
        list.add("Item 1");  
        list.add("Item 2");  
        list.add("Item 3");  
        list.add("Item 4");  
        list.add("Item 5");  
        return list;  
    }  
  
}  


对比很容易发现,前者(extends Activity)需要在xml布局中找到ListView控件,后者则不需要,但是后者xml布局中ListView标签id固定. 
最后关于布局文件,前者(extends Activity)xml布局中,ListView标签id可以任意取值,而后者(extends ListActivity)ListView标签中id写法固定android:id="@+id/android:list" 


二:以ArrayAdapter为例,自定义ListItem样式 


系统样式: 
android.R.layout.simple_expandable_list_item_1 
Java代码  
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());    




自定义样式 
R.layout.my_simple_list_item_1
Java代码  
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.my_simple_list_item_1,getListData());   

my_simple_list_item_1.xml: 

Java代码  
<?xml version="1.0" encoding="utf-8"?>  
<TextView xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@+id/tv"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:textColor="#0000FF"  
    android:textSize="12pt"  
/>  


请留意这种布局,根布局为控件TextView. 






三:自定义ArrayAdapter 


ListView_ArrayAdapterActivity .java 


Java代码  
public class ListView_ArrayAdapterActivity extends Activity {  
      
    private ListView listView;  
      
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
          
        setContentView(R.layout.main);  
        listView = (ListView) findViewById(R.id.listView);  
          
        IconListAdapter adapter = new IconListAdapter(this,getListData());  
        listView.setAdapter(adapter);  
    }  
      
    //初始化数据  
    private List<IconListItem> getListData(){  
        List<IconListItem> listItems = new ArrayList<IconListItem>();  
        IconListItem item1 = new IconListItem("Item 1  ",R.drawable.icon );  
        IconListItem item2 = new IconListItem("Item 2  ",R.drawable.icon );  
        IconListItem item3 = new IconListItem("Item 3  ",R.drawable.icon );  
        IconListItem item4 = new IconListItem("Item 4  ",R.drawable.icon );  
        listItems.add(item1);  
        listItems.add(item2);  
        listItems.add(item3);  
        listItems.add(item4);  
        return listItems;  
    }  
      
      
    class IconListAdapter extends ArrayAdapter<IconListItem> {  
             
        protected LayoutInflater mInflater;  
        private static final int mLayout = R.layout.custom_layout1;  
          
        public IconListAdapter(Context context,List<IconListItem> items) {  
             
            super(context,mLayout, items);//上下文环境/布局文件/填充布局文件数据  
            mInflater = LayoutInflater.from(ListView_ArrayAdapterActivity.this);  
        }  
  
        public View getView(int position, View convertView, ViewGroup parent) {  
              
            TextView textView;  
            ImageView imageView;  
  
            View view;  
            if (convertView == null) {  
                view = mInflater.inflate(mLayout,null);  
            } else {  
                view = convertView;  
            }  
  
            textView = (TextView) view.findViewById(R.id.text1);  
            textView.setText(getItem(position).getTitle());  
  
            imageView = (ImageView) view.findViewById(R.id.icon);  
            imageView.setImageResource(getItem(position).getResource());  
  
            return view;  
        }  
    }  
}  

IconListItem.java 

Java代码  
public class IconListItem {  
      
    //每条显示的构造方法  
    private final String mTitle;  
    private final int mResource;  
  
    public IconListItem(String title, int resource) {  
        mResource = resource;  
        mTitle = title;  
    }  
  
    public String getTitle() {  
        return mTitle;  
    }  
  
    public int getResource() {  
        return mResource;  
    }  
}  


main.xml 

Java代码  
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
<ListView  
    android:id="@+id/listView"    
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    />  
</LinearLayout>  






custom_layout1.xml 


Java代码  
<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout   
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="horizontal"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
<TextView   
    android:id="@+id/text1"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_alignParentRight="true"  
    android:layout_centerVertical="true"  
/>  
  
<ImageView   
    android:id="@+id/icon"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_alignParentLeft="true"  
/>  
</RelativeLayout>  




引用
给大家列出本类所有成员方法实用的处理方式: 


void  add(T object)  //添加一个对象到本ArrayAdapter 


void  clear()  //清除所有元素 


static ArrayAdapter<CharSequence>  createFromResource(Context context, int textArrayResId, int textViewResId)  //从layout资源构造arrayadapter 


Context  getContext()  //获取实例 


int  getCount() 


View  getDropDownView(int position, View convertView, ViewGroup parent)  //获取drop down的popup风格选择条目的内容,参数1是位置,参数2可以通过强制转换直接获取本条的内容 


Filter  getFilter() //使用正则过滤数据 


T  getItem(int position)  //获取单条内容 


long  getItemId(int position)  


int  getPosition(T item) //通过内容获取是某条 


View  getView(int position, View convertView, ViewGroup parent) 


void  insert(T object, int index)  //插入新条目到数组的index位置 


void  notifyDataSetChanged()  //通知数据变化了,告诉绑定Adapter的widget来更新UI 


void  remove(T object)  //移出一条从数组,这里并没有指定位置 


void  setDropDownViewResource(int resource)  //设置dropdown的layout风格 
Sets the layout resource to create the drop down views. 


void  setNotifyOnChange(boolean notifyOnChange)  //本条是arrayadapter最强大的功能,android123强烈推荐处理大数据时使用该方法,可以降低ui的处理量,刷新ui可以更快速,主要可以停止对 
(add(T), insert(T, int), remove(T), clear() 的操作,当然可以通过 notifyDataSetChanged(). 或 setNotifyOnChange(true) 通知变化 


void  sort(Comparator<? super T> comparator)  //这里是android开发网经常用的排序,使用arrayadapter可以直接排序,十分方便 


推荐大家什么情况使用arrayadapter,什么时候使用baseadapter。当数量较多,比如超过100条或频繁动态增减时使用arrayadapter可以方便控制ui,通过setNotifyOnChanage方法,如果比较简单仅仅呈现直接从 baseadapter更节省资源。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值