天天看点

android-----ListView和GridView的用法

ListView和GridView都是比较常用的控件,都是用来显示数据的。ListView主要用来显示列表型的数据(如播放列表),而GridView主要用来显示表格型的数据(如九宫格图)。

ListView和GridView的使用都需要用到Adapter,并且之间的用法也比较相似。

ListView的使用

activity_main.xml布局文件:

<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" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" >
    </ListView>

</RelativeLayout>
           

item.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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:src="@drawable/ic_launcher"/>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>
           

MainActivity.java文件:

package com.pegatron.listview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private ListView lv;
	private ArrayAdapter<String>  adapter;
	private SimpleAdapter sa;
	private List<HashMap<String, String>> list;
	private HashMap<String, String> map;
	private String[] names;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView) findViewById(R.id.listView1);
        /**
         * 配合arrayadapter的使用
         */
       /* names=new String[]{"mike1","liz1","sasa1","osean1","mike2","liz2","sasa2","osean2","mike3","liz3","sasa3","osean3"};
        adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
        lv.setAdapter(adapter);*/
        
        list=new ArrayList<HashMap<String,String>>();
        for(int i=0;i<50;i++){
        	map=new HashMap<String, String>();
        	map.put("textView1", "hello"+i);
        	list.add(map);
        };
        
        /**
         * 配合simpleadapter的使用
         */
        /* sa=new SimpleAdapter(this, list, R.layout.item, new String[]{"textView1"}, new int[]{R.id.textView1});
        lv.setAdapter(sa);*/
        
        
        /**
         * 自定义的adapter
         */
        lv.setAdapter(new MyAdapter());
        lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(MainActivity.this, "您选择了:"+position, 1).show();
				
			}
        	
		});
        
    }

    private class MyAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			if(list!=null){
				return list.size();
			}else{
				return 0;
			}
			
		}

		@Override
		public Object getItem(int position) {
			return list.get(position);
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			HashMap<String, String> listItem=list.get(position);
			View v=View.inflate(getApplicationContext(), R.layout.item, null);
			TextView tv=(TextView) v.findViewById(R.id.textView1);
			tv.setText(listItem.get("textView1"));
			return v;
		}
    	
    }

    
    
}
           

配合ArrayAdapter使用、配合SimpleAdapter使用、自定义的MyAdapter三种方式的运行效果图:

android-----ListView和GridView的用法
android-----ListView和GridView的用法
android-----ListView和GridView的用法

GridView的使用:

布局文件:

<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" >

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:numColumns="3" >
    </GridView>

</RelativeLayout>
           

items.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>
           

MainActivity.java文件:

package com.pega.gridview;

import java.util.ArrayList;
import java.util.List;
import java.util.zip.Inflater;

import android.os.Bundle;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private GridView gv;
	private MyAdapter ma;
	private String[] picture=new String[]{
			"picture1","picture2","picture3",
			"picture4","picture5","picture6",
			"picture7","picture8","picture9",
			"picture10","picture11","picture12",
			"picture13","picture14","picture15"};
	private int[] images=new int[]{
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher
	};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gv=(GridView) findViewById(R.id.gridView1);
        ma=new MyAdapter(picture,images,this);
        
        gv.setAdapter(ma);
        gv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO 自动生成的方法存根
				Toast.makeText(MainActivity.this, "picture"+(position+1), Toast.LENGTH_LONG).show();
			}
        	
		});
    }


    class MyAdapter extends BaseAdapter{
    	private List<Picture> lists;

    	public MyAdapter(){
    	}
		public MyAdapter(String[] picture, int[] images,
				MainActivity mainActivity) {
			lists=new ArrayList<MainActivity.Picture>();
			for(int i=0;i<images.length;i++){
				Picture pic=new Picture(images[i],picture[i]);
				lists.add(pic);
				
			}
			
		}
		@Override
		public int getCount() {
			
			return lists.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO 自动生成的方法存根
			return lists.get(position);
		}

		@Override
		public long getItemId(int position) {
			// TODO 自动生成的方法存根
			return lists.get(position).getPid();
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			if(convertView==null){
				convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.items, null);
				ImageView iv=(ImageView) convertView.findViewById(R.id.imageView1);
				TextView tv=(TextView) convertView.findViewById(R.id.textView1);
				iv.setImageResource(lists.get(position).getPid());
				tv.setText(lists.get(position).getPdesc());
				
			}
			return convertView;
		}
    	
    }
    class Picture{
    	private int pid;
    	private String pdesc;
    	public Picture() {
			
		}
		public Picture(int pid, String pdesc) {
			super();
			this.pid = pid;
			this.pdesc = pdesc;
		}
		public int getPid() {
			return pid;
		}
		public void setPid(int pid) {
			this.pid = pid;
		}
		public String getPdesc() {
			return pdesc;
		}
		public void setPdesc(String pdesc) {
			this.pdesc = pdesc;
		}
    	
    }
    
}
           

这里只是用了自定义的Adapter,运行的效果图:

android-----ListView和GridView的用法

另外的两种Adapter的用法跟ListView的用法类似。

继续阅读