您的位置:首页 > 移动开发 > Android开发

ListView-Arrayadapter

2016-01-23 10:50 441 查看
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更节省资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息