zoukankan      html  css  js  c++  java
  • Android ListView的使用

     1、定义简单的适配器形式。

    首先定义一个Layout为listviewitem.xml. 里面有三个TextView。分别代表学号,姓名,班级。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/cuslistViewItem"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" 
            android:layout_marginLeft="10dp"
            android:layout_marginBottom="10dp"/>
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:layout_marginLeft="10dp" 
            android:layout_marginBottom="10dp"/>
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:layout_marginLeft="10dp"
            android:layout_marginBottom="10dp" />
    </LinearLayout>
    

     在activity_main.xml中放一个ListView控件,很简单,不解释。

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="50dp" >
        </ListView>
    
    </RelativeLayout>
    

    然后建立数据源

    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		ListView lv = (ListView)this.findViewById(R.id.listView1);
    		
    		ArrayList<HashMap<String,String>> listSource = new ArrayList<HashMap<String,String>>();
    		for(int num=1; num< 10; num++)
    		{
    			HashMap<String,String> map = new HashMap<String, String>();
    			map.put("num",String.valueOf(num));
    			map.put("name", "stu"+num );
    			map.put("className", "software 2");
    			listSource.add(map);
    		}
    		
    		SimpleAdapter mStuInfo = new SimpleAdapter(
    				this,listSource,R.layout.listviewitem, 
    				new String[] {"num","name","className"}, 
    				new int[]{R.id.textView1, R.id.textView2, R.id.textView3});
    		
    		lv.setAdapter(mStuInfo);
    	}
    
    }
    

     最后将listview绑定适配器的数据源。效果图如下图。

     当然可以加入ItemClick事件。

     lv.setOnItemClickListener(new ItemClickListener());
    

    然后实现ItemClickListener。

    	 class ItemClickListener implements OnItemClickListener {
    		 //arg2 is the position
    		 //arg3 is row number
    		@Override
    		public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    			// TODO Auto-generated method stub
    			HashMap<String, String> item=(HashMap<String, String>) arg0.getItemAtPosition(arg2); 
    			Toast.makeText(MainActivity.this, item.get("name"), Toast.LENGTH_LONG).show();
    		}
    
    	}
    

     ListView和GridView在此用法是一样的。可以把ListView控件换成GridView控件。

    二、下面采用新的适配器形式。将添加学生图片,并重新组织布局。效果如下图:

    代码如下:

    重新设计的listviewitem.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/cuslistViewItem"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
    
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginBottom="10dp" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" 
            android:layout_toRightOf="@+id/imageView1"
            android:layout_marginLeft="10dp"
            android:layout_marginBottom="10dp"/>
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:layout_toRightOf="@+id/textView1" 
            android:layout_marginLeft="10dp" 
            android:layout_marginBottom="10dp"/>
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:layout_toRightOf="@+id/imageView1"
            android:layout_below="@+id/textView1"
            android:layout_marginLeft="10dp"
            android:layout_marginBottom="30dp" />
    </RelativeLayout>
    

    重新的数据源。建立了MyListViewAdapter类继承BaseAdapter。

    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		ListView lv = (ListView)this.findViewById(R.id.listView1);
    		
    		ArrayList<HashMap<String,String>> listSource = new ArrayList<HashMap<String,String>>();
    		for(int num=1; num< 10; num++)
    		{
    			HashMap<String,String> map = new HashMap<String, String>();
    			map.put("photo", String.valueOf(R.drawable.ic_launcher));
    			map.put("num",String.valueOf(num));
    			map.put("name", "stu"+num );
    			map.put("className", "software 2");
    			listSource.add(map);
    		}
    		lv.setAdapter(new MyListViewAdapter(listSource));
    	}
    	
    	public class MyListViewAdapter extends BaseAdapter{
    
    		View[] itemViews;
    		public MyListViewAdapter(ArrayList<HashMap<String,String>> listSource)
    		{
    			itemViews = new View[listSource.size()];
    			Iterator<HashMap<String, String>> it = listSource.iterator();
    			HashMap<String,String> hash;
    			int i = 0;
    			try{
    				while(it.hasNext())
    				{
    					hash = it.next();
    					itemViews[i] =  makeItemView(hash);
    					i++;
    				}
    			}catch(Exception e){
    				Log.e("Error", e.getMessage());
    				e.printStackTrace();
    			}
    	
    		}
    		
    		private View makeItemView(HashMap<String,String> map) {  
    			
    			            if(map == null || map.isEmpty()) return null;
    			            LayoutInflater inflater = (LayoutInflater) MainActivity.this  
    			                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
    			            
    			            // 使用View的对象itemView与R.layout.item关联   
    			            View itemView =  inflater.inflate(R.layout.listviewitem, null);  
    			  
    			            TextView title = (TextView) itemView.findViewById(R.id.textView1);  
    			            title.setText(map.get("num"));  
    			            Log.e("num" , map.get("num"));
    			            
    			            TextView text = (TextView) itemView.findViewById(R.id.textView2);  
    			            text.setText(map.get("name"));
    			            Log.e("name", map.get("name"));
    			            
    			            TextView text2 = (TextView) itemView.findViewById(R.id.textView3);  
    			            text2.setText(map.get("className")); 
    			            Log.e("className", map.get("className"));
    			            
    			            ImageView image = (ImageView) itemView.findViewById(R.id.imageView1);  
    			            image.setImageResource(Integer.parseInt(map.get("photo"))); 
    			            Log.e("photo", map.get("photo"));
    			              
    			            return itemView;  
    			       } 
    
    		
    		@Override
    		public int getCount() {
    			// TODO Auto-generated method stub
    			return itemViews.length;
    		}
    
    		@Override
    		public Object getItem(int position) {
    			// TODO Auto-generated method stub
    			return itemViews[position];
    		}
    
    		@Override
    		public long getItemId(int position) {
    			// TODO Auto-generated method stub
    			return position;
    		}
    
    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    			// TODO Auto-generated method stub
    			if(convertView == null)
    				return itemViews[position];
    			return convertView;
    		}}
    
    		}
    
    }
    

    作者:Work Hard Work Smart
    出处:http://www.cnblogs.com/linlf03/
    欢迎任何形式的转载,未经作者同意,请保留此段声明!

  • 相关阅读:
    如何把this指针转换成boost的shared_ptr
    字符指针数组 和 字符指针的指针 即 char ** arr VS char * arr[]
    latex图片自动浮动到最后一页单独占用一页
    Android首次开发的经历
    jvm内存问题诊断1
    性能优化从删除子查询做起
    资治通鉴故事止谤莫如自修
    Forward框架的逆袭:解析Forward+渲染
    FFT镜头效果解析
    最先进的开源游戏引擎KlayGE 4.1发布
  • 原文地址:https://www.cnblogs.com/linlf03/p/2960192.html
Copyright © 2011-2022 走看看