第二天
Adapter
1、声明listview的属性和声明用来存放显示数据的属性
2、初始化listview
3、给listview绑定适配器
4、将listview添加到Activity
**ArrayAdapter
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
//ArrayAdapter 步骤1:声明一个ListView属性
private ListView mListView;
//声明一个属性用来存放要显示的数据
private List<String> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ArrayAdapter 步骤二:初始化ListView
mListView=new ListView(this);
//ArrayAdapter 步骤三:给ListView绑定适配器
//第一个参数是传递一个上下文对象
//第二个参数是系统预先提供好的一种简单的布局文件
//第三个参数是你要用arraylist来显示的数据是什么
mListView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getData()));
//ArrayAdapter步骤4:将ListView添加到Activity上
setContentView(mListView);
}
//arrayList数据里显示的名字
private List<String> getData(){
data=null;
//如果一个方法可能会被多次调用,
// 而这个方法中又存在对类成员变量的初始化赋值
//在初始化之前,先将其置空
data=new ArrayList<String>();
data.add("吕布");
data.add("德玛西亚");
data.add("貂蝉");
data.add("信爷");
data.add("孙悟空");
return data;
}
}
做出来的效果是
**SimpleAdapter
// 步骤1:创建一个布局文件,用来给每个Item(Cell)进行布局
布局样式可以自己设定样式
//步骤2:在MainActivity布局文件中添加ListView
//步骤3:声明属性并且进行初始化
//步骤4:创建一个simple适配器
//步骤5:将adapter和listview进行绑定
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//SimpleAdapter是一种基本版的完成的列表视图
public class MainActivity extends AppCompatActivity {
//simpleAdapter可以进行布局文件定制,从而达到自定义的效果
//simpleAdapter
// 步骤1:创建一个布局文件,用来给每个Item(Cell)进行布局
//listView在iOS开发里面叫UITableView
//iOS里面没有包的概念,有命名空间
//simpleAdapter 步骤2:
//在MainActivity布局文件中添加ListView
//simpleAdapter 步骤3:
//声明属性并且进行初始化
private ListView mlistView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//进行初始化
mlistView = (ListView) findViewById(R.id.main_listView);
//simpleAdapter 步骤4:
//创建一个simple适配器
//参数一:上下文对象
//参数二:要显示的数据
//参数三:数据显示的布局文件
//参数四:数据提取时用到的键
//参数五:数据对应的布局文件中的控件id
SimpleAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.list_item_layout, new String[]{"image", "title", "info"},
new int[]{R.id.list_image, R.id.list_item_title, R.id.list_item_info}
);
//simpleAdapter 步骤5:
//将adapter和listview进行绑定
mlistView.setAdapter(adapter);
}
//在这个方法里面进行数据的创建和初始化,拼装要显示的数据
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("image", R.drawable.lml);
map.put("title", "面朝大海");
map.put("info", "春暖花开");
list.add(map);
Map<String, Object> map1 = new HashMap<>();
map1.put("image", R.drawable.fdx);
map1.put("title", "中国人");
map1.put("info", "是一家");
list.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("image", R.drawable.a4);
map2.put("title", "英雄联盟");
map2.put("info", "打野的你哪去了?");
list.add(map2);
return list;
}
}
做出来的效果是:
**BaseAdapter
BaseAdapter使用
//1.创建一个布局文件,给Item的控件进行布局
//2.在对应的Activity中添加ListView控件
//3.声明属性并进行初始化
//4.创建一个类,继承自BaseAdapter
“`
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import bean.News;
/**
* Created by user on 2016/7/6.
*/
public class MyAdapter extends BaseAdapter {
//声明属性,保存数据和上下文对象
private List list;
private Context context;
public MyAdapter(Context context, List<News> list) {
this.context = context;
this.list = list;
}
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
//获取Item对应的ID
public long getItemId(int i) {
return i;
}
@Override
//获取position对应的视图
public View getView(int i, View view, ViewGroup viewGroup) {
/*
-------------优化前-------------
//去获取指定的layout文件中指定id控件
view = LayoutInflater.from(context).inflate(R.layout.item_layout, null);
ImageView image = (ImageView) view.findViewById(R.id.image);
TextView title = (TextView) view.findViewById(R.id.text1);
TextView infoView = (TextView) view.findViewById(R.id.text2);
//拿到数据
News news = (News) getItem(i);
//根据数据对界面进行赋值
image.setBackgroundResource(news.getImg());
title.setText(news.getTitle());
infoView.setText(news.getInfo());
return view;
*/
//优化后的方式
//利用缓存
ViewHolder holder;
if (view == null) {
//将指定的布局文件转换成视图对象
//这里是缓存的界面控件
view = View.inflate(context, R.layout.item_layout, null);
holder = new ViewHolder();
holder.imageView = (ImageView) view.findViewById(R.id.image);
holder.textView = (TextView) view.findViewById(R.id.text1);
holder.InfoView = (TextView) view.findViewById(R.id.text2);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
News news = (News) getItem(i);
holder.imageView.setBackgroundResource(news.getImg());
holder.textView.setText(news.getTitle().toString());
holder.InfoView.setText(news.getInfo().toString());
return view;
}
}
//5.创建Adapter并进行绑定
```
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import bean.News;
public class MainActivity extends AppCompatActivity {
//BaseAdapter使用
//1.创建一个布局文件,给Item的控件进行布局
//2.在对应的Activity中添加ListView控件
//3.声明属性并进行初始化
//4.创建一个类,继承自BaseAdapter;
//5.创建Adapter并进行绑定
private ListView mListView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.lv);
//5.创建Adapter并进行绑定
MyAdapter adapter = new MyAdapter(this,getData());
//将ListView和Adapter进行绑定
mListView.setAdapter(adapter);
}
private List<News> getData(){
List<News> list = new ArrayList<>();
News new1 = new News(R.drawable.lm,"美女","这个看脸的世界");
list.add(new1);
News new2 = new News(R.drawable.cc,"雪山","雪的世界");
list.add(new2);
News new3 = new News(R.drawable.dd,"南极","企鹅的世界");
list.add(new3);
News new4 = new News(R.drawable.lm,"美女","这个看脸的世界");
list.add(new4);
News new5 = new News(R.drawable.cc,"雪山","雪的世界");
list.add(new5);
News new6 = new News(R.drawable.dd,"南极","企鹅的世界");
list.add(new6);
News new7 = new News(R.drawable.lm,"美女","这个看脸的世界");
list.add(new7);
News new8 = new News(R.drawable.cc,"雪山","雪的世界");
list.add(new8);
News new9 = new News(R.drawable.dd,"南极","企鹅的世界");
list.add(new9);
return list;
}
}
运行出来的效果是:
就像是这个似的!