android ListView 与GridView 学习总结(五)

ListView的使用总结
 基本使用:
   步骤:在布局文件中定义一个ListView控件-在活动中获得ListView的实例-获得适配器adapter的实例并且传入三个参数-把适配器对象传递给listview实例

public class MainActivity extends Activity{
	ListView contactsView;
	ArrayAdapter<String> adapter;
	List<String> contactsList=new ArrayList<String>();
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		contactsView=(ListView)findViewById(R.id.contactsView);
		adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
		contactsView.setAdapter(adapter);
		readContacts();
	}
	public void readContacts(){
		Cursor cursor=null;
		try{
		 cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
		 while(cursor.moveToNext()){
			String name=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
			String number=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
			contactsList.add(name+"/n"+number);
		 }
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(cursor!=null){
			cursor.close();
			}
		}
	}
}  

 自定义的ListView的使用
 步骤:自定义适配器适配类型-为每一个子项制定自定义布局(item——layout)-创建自定义的适配器,将每一个子项的内容指定给布局控件-
 -获得listview 的实例以及一个容纳所有子项的list实例和适配器实例-把适配器传入布局
例如一个水果自定义listview

public class Fruit(){
    private String name;
    private int ImageId;
    public Fruit(String name,int ImageId){
        this.name=name;
        this.ImageId=ImageId;
    }
    public String getName(){
        return name;
    }
    public int ImageId(){
        return ImageId;
    }
}
fruit_item.xml
...
<ImageView
.../>
<TextView
.../>
...
public class FruitAdapter extends ArrrayAdapter(Fruit){
    private int resourceId;
    public FruitAdapter(Context context,int textViewResourceId,List<Fruit>objects){
        super(context,textViewResourceId,objects);
        resourceId=textViewResourceId;
    }
    public View getView(int position,View convertView,ViewGroup parent){
        Fruit fruit=getItem(position);
        View view=LayoutInflater.from(getContext()).inflate(resourceId,null);
        ImageView fruitImage=(ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName=(TextView) view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());
        fruiName.setText(fruit.getName());
        return view;
    }

}
mainactivity
....

gridview的使用
几个属性:
android:numColumns="auto_fit" --------列数设置为自动
android:columnWidth="90dp",----------每列的宽度,也就是Item的宽度
android:stretchMode="columnWidth"------缩放与列宽大小同步
android:verticalSpacing="10dp"----------垂直边距
android:horizontalSpacing="10dp"-------水平边距

public void mainactivity extends Activity{
    private GridView gv;
    private List<Map<String,Objects>> data_list=new ArrayList<Map<String,Objects>>();
    private SimpleAdapter<map<String,Objects>> adapter;
    private int[] image={R.id...,.....,......};
    private String[] name={.....};
    public void onCreate(Bundle savedInstanceState){
        super.(savedInstanceState);
        setContentView(R.layout.test);
        gv=(GridView)findViewById(R.id.gridview);
        getdata();
        String[] from={"image","text"};
        int[] to={R.id.image,R.id.text};
        adapter=new SimpleAdapter<map<String,Objects>>(mainactivity.this,data_list.R.layout.item,from,to);
        gv.setAdapter(adapter);
        
    }
    public List<Map<String,Objects>> getdata(){
        for(int i=0;i<image.length;i++){
            Map<String,objects> map=new HashMap<String,Objects>();
            map.put("image",image[i]);
            map.put("text",name[i]);
            data_list.add(map);
            }
            return data_list;
        }
}

补充关于hashmap:
这里使用hashmap就相当于在自定义的listview中的自定义泛型 fruit目的都是为了能够容纳一对对的数据集合
  Map<String, Object> map = new HashMap<String, Object>();
            map.put("image", icon[i]);
            map.put("text", iconName[i]);
            data_list.add(map);此处的map就是一对数据的集合

posted @ 2016-03-27 22:38  风雨缠舟  阅读(362)  评论(0编辑  收藏  举报