Android ListView使用详解

来源:互联网 发布:ping网络请求超时 编辑:程序博客网 时间:2024/04/29 02:37

最近在做android上有关采用ListView进行信息显示的开发工作,发现有很多实现的方法,不过思想基本是一致的。网上大部分的测试程序采用的是数组存储要显示的信息,但是为了更好地对信息进行管理,我采用的是用对象来存储信息方式。同时我要对item点击事件进行相应,中间遇到了一些困惑,不过都解决了,这里把完整代码分享一下:

    首先,list布局文件:     

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:orientation="vertical"  
  7.     tools:context=".ListTestActivity" >  
  8.   
  9.   
  10.     <ListView  
  11.         android:id="@+id/listView"  
  12.         android:layout_width="match_parent"  
  13.         android:layout_height="wrap_content" >  
  14.   
  15.     </ListView>  
  16.   
  17. </LinearLayout>  
     接着,item布局文件:

      

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.   
  8.   
  9.   
  10.     <ImageView  
  11.         android:id="@+id/img"  
  12.         android:layout_width="71dp"  
  13.         android:layout_height="71dp"  
  14.         android:src="@drawable/ic_launcher" />  
  15.   
  16.     <LinearLayout  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:orientation="vertical" >  
  20.   
  21.   
  22.   
  23.   
  24.         <TextView  
  25.             android:id="@+id/title"  
  26.             android:layout_width="242dp"  
  27.             android:layout_height="wrap_content"  
  28.             android:text="222"  
  29.             android:textAppearance="?android:attr/textAppearanceMedium" />  
  30.   
  31.   
  32.   
  33.   
  34.   
  35.         <TextView  
  36.             android:id="@+id/info"  
  37.             android:layout_width="match_parent"  
  38.             android:layout_height="47dp"  
  39.             android:text="11" />  
  40.   
  41.     </LinearLayout>  
  42.   
  43. </LinearLayout>  
      接着,主程序:

       

[java] view plaincopy
  1. package my.test.ListTest;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import android.annotation.SuppressLint;  
  6. import android.app.Activity;  
  7. import android.content.Context;  
  8. import android.os.Bundle;  
  9. import android.view.ContextMenu;  
  10. import android.view.LayoutInflater;  
  11. import android.view.MenuItem;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.view.ContextMenu.ContextMenuInfo;  
  15. import android.view.View.OnCreateContextMenuListener;  
  16. import android.widget.AdapterView;  
  17. import android.widget.BaseAdapter;  
  18. import android.widget.ImageView;  
  19. import android.widget.ListView;  
  20. import android.widget.TextView;  
  21. import android.widget.Toast;  
  22. import android.widget.AdapterView.OnItemClickListener;  
  23.   
  24. @SuppressLint("ParserError")  
  25. public class ListTestActivity extends Activity {  
  26.     ListView listView;  //声明一个ListView对象  
  27.     private List<info> mlistInfo = new ArrayList<info>();  //声明一个list,动态存储要显示的信息  
  28.       
  29.     @Override  
  30.     public void onCreate(Bundle savedInstanceState) {  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.main);         
  33.           
  34.         listView=(ListView)this.findViewById(R.id.listView);    //将listView与布局对象关联  
  35.           
  36.         setInfo();  //给信息赋值函数,用来测试  
  37.           
  38.         listView.setAdapter(new ListViewAdapter(mlistInfo));  
  39.           
  40.         //处理Item的点击事件  
  41.         listView.setOnItemClickListener(new OnItemClickListener(){  
  42.             public void onItemClick(AdapterView<?> parent, View view,int position, long id) {  
  43.                 info getObject = mlistInfo.get(position);   //通过position获取所点击的对象  
  44.                 int infoId = getObject.getId(); //获取信息id  
  45.                 String infoTitle = getObject.getTitle();    //获取信息标题  
  46.                 String infoDetails = getObject.getDetails();    //获取信息详情  
  47.                   
  48.                 //Toast显示测试  
  49.                 Toast.makeText(ListTestActivity.this"信息ID:"+infoId,Toast.LENGTH_SHORT).show();  
  50.             }  
  51.         });  
  52.           
  53.         //长按菜单显示  
  54.         listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {  
  55.             public void onCreateContextMenu(ContextMenu conMenu, View view , ContextMenuInfo info) {  
  56.                 conMenu.setHeaderTitle("菜单");  
  57.                 conMenu.add(000"条目一");  
  58.                 conMenu.add(011"条目二");  
  59.                 conMenu.add(022"条目三");  
  60.             }  
  61.         });  
  62.           
  63.     }  
  64.     //长按菜单处理函数  
  65.     public boolean onContextItemSelected(MenuItem aItem) {  
  66.         AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)aItem.getMenuInfo();  
  67.         switch (aItem.getItemId()) {  
  68.              case 0:  
  69.                  Toast.makeText(ListTestActivity.this"你点击了条目一",Toast.LENGTH_SHORT).show();  
  70.                  return true;  
  71.              case 1:  
  72.                  Toast.makeText(ListTestActivity.this"你点击了条目二",Toast.LENGTH_SHORT).show();  
  73.                
  74.                  return true;  
  75.              case 2:  
  76.                  Toast.makeText(ListTestActivity.this"你点击了条目三",Toast.LENGTH_SHORT).show();  
  77.                  return true;  
  78.         }  
  79.         return false;  
  80.    }  
  81.       
  82.       
  83.     public class ListViewAdapter extends BaseAdapter {    
  84.         View[] itemViews;  
  85.     
  86.         public ListViewAdapter(List<info> mlistInfo) {  
  87.             // TODO Auto-generated constructor stub  
  88.             itemViews = new View[mlistInfo.size()];              
  89.             for(int i=0;i<mlistInfo.size();i++){  
  90.                 info getInfo=(info)mlistInfo.get(i);    //获取第i个对象  
  91.                 //调用makeItemView,实例化一个Item  
  92.                 itemViews[i]=makeItemView(  
  93.                         getInfo.getTitle(), getInfo.getDetails(),getInfo.getAvatar()  
  94.                         );  
  95.             }  
  96.         }  
  97.   
  98.         public int getCount() {  
  99.             return itemViews.length;    
  100.         }  
  101.     
  102.         public View getItem(int position) {    
  103.             return itemViews[position];    
  104.         }    
  105.     
  106.         public long getItemId(int position) {    
  107.             return position;    
  108.         }  
  109.           
  110.         //绘制Item的函数  
  111.         private View makeItemView(String strTitle, String strText, int resId) {    
  112.             LayoutInflater inflater = (LayoutInflater) ListTestActivity.this    
  113.                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
  114.     
  115.             // 使用View的对象itemView与R.layout.item关联  
  116.             View itemView = inflater.inflate(R.layout.item, null);  
  117.               
  118.             // 通过findViewById()方法实例R.layout.item内各组件  
  119.             TextView title = (TextView) itemView.findViewById(R.id.title);    
  120.             title.setText(strTitle);    //填入相应的值  
  121.             TextView text = (TextView) itemView.findViewById(R.id.info);    
  122.             text.setText(strText);    
  123.             ImageView image = (ImageView) itemView.findViewById(R.id.img);    
  124.             image.setImageResource(resId);  
  125.               
  126.             return itemView;    
  127.         }  
  128.     
  129.           
  130.         public View getView(int position, View convertView, ViewGroup parent) {    
  131.             if (convertView == null)    
  132.                 return itemViews[position];    
  133.             return convertView;  
  134.         }    
  135.     }     
  136.       
  137.     public void setInfo(){  
  138.         mlistInfo.clear();  
  139.         int i=0;  
  140.         while(i<10){  
  141.             info information = new info();  
  142.             information.setId(1000+i);  
  143.             information.setTitle("标题"+i);  
  144.             information.setDetails("详细信息"+i);  
  145.             information.setAvatar(R.drawable.i2);  
  146.               
  147.             mlistInfo.add(information); //将新的info对象加入到信息列表中  
  148.             i++;  
  149.         }  
  150.     }  
  151.   
  152. }  
        info类文件:

        

[java] view plaincopy
  1. package my.test.ListTest;  
  2.   
  3. public class info {  
  4.     private int id; //信息ID  
  5.     private String title;   //信息标题  
  6.     private String details; //详细信息  
  7.     private int avatar; //图片ID  
  8.       
  9.       
  10.   
  11.     //信息ID处理函数  
  12.     public void setId(int id) {    
  13.         this.id = id;  
  14.     }  
  15.     public int getId() {    
  16.         return id;  
  17.     }  
  18.     //标题  
  19.     public void setTitle(String title) {    
  20.         this.title = title;  
  21.     }  
  22.     public String getTitle() {  
  23.         return title;    
  24.     }  
  25.       
  26.     //详细信息  
  27.     public void setDetails(String info) {    
  28.         this.details = info;  
  29.     }  
  30.     public String getDetails() {    
  31.         return details;    
  32.     }  
  33.       
  34.     //图片  
  35.     public void setAvatar(int avatar) {    
  36.         this.avatar = avatar;  
  37.     }  
  38.     public int getAvatar() {    
  39.         return avatar;  
  40.     }  
  41.       
  42.   
  43. }  
   加入图片文件,运行即可!


   贴上效果图:

    

     

    

0 0
原创粉丝点击