ListView——ArrayAdapter

一:分别继承于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;    
    }    
   
}  


下面这个程序是简单的使用ArrayAdapter来进行ListView和ArrayList的绑定
public class TodoListActivity extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView myListView=(ListView)findViewById(R.id.myListView);
        final EditText myEditView=(EditText)findViewById(R.id.myEditText);
        final ArrayList<String> todoItems=new ArrayList<String>();
        final ArrayAdapter<String> aa;
        aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,todoItems);
        myListView.setAdapter(aa);
         
        myEditView.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==KeyEvent.ACTION_DOWN)
if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER)
{
todoItems.add(0,myEditView.getText().toString());
aa.notifyDataSetChanged();
myEditView.setText("");
return true;
}

return false;
}
});
         
    }
}

自己定制ToDoItem来的代替String的程序如下:
默认情况下,ArrayAdapter把每个对象(如下面的 ToDoItem)的toString值绑定到一个ListView的一项(它的每一项都是一个TextView)中。
public class TodoListActivity extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView myListView=(ListView)findViewById(R.id.myListView);
        final EditText myEditView=(EditText)findViewById(R.id.myEditText);
        final ArrayList< ToDoItem> todoItems=new ArrayList< ToDoItem>();
        final ArrayAdapter< ToDoItem> aa;
        aa=new ArrayAdapter< ToDoItem>(this, android.R.layout.simple_list_item_1,todoItems);
        myListView.setAdapter(aa);
         
        myEditView.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==KeyEvent.ACTION_DOWN)
if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER)
{
todoItems.add(0,new ToDoItem(myEditView.getText().toString()));
aa.notifyDataSetChanged();
myEditView.setText("");
return true;
}

return false;
}
});
         
    }
}



package cn.todolist.rxm;

import java.text.SimpleDateFormat;
import java.util.Date;

public class ToDoItem {
String task;
Date created;
public String getTask()
{
return task;
}

public Date getCreated()
{
return created;
}
public ToDoItem(String _task)
{
this(_task,new Date(java.lang.System.currentTimeMillis()));
}

public ToDoItem(String _task, Date _created) {
// TODO Auto-generated constructor stub
task=_task;
created=_created;
}
public String toString()
{
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yy");
String dateString=sdf.format(created);
return "("+dateString+")"+task;
}
}












    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.三:自定义ArrayAdapterListView_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)   //添加一个对象到本ArrayAdaptervoid   clear()   //清除所有元素static ArrayAdapter<CharSequence>   createFromResource(Context context, int textArrayResId, int textViewResId)   //从layout资源构造arrayadapterContext   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来更新UIvoid   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、付费专栏及课程。

余额充值