1.主要内容介绍
1.adapter 适配器,容器,设置内容的地方。
2.Bean类。类似于数据模板的作用,利用这个模板可以很方便的把数据,放到ListView里面。
2.arraylist。可以通过范型的方式来设置数据,这里是通过调用add()。方法即可增加数据。
3.layout。需要两个,一个是放在目标listview.的xml文件。另外一个是用来放置,listView里面的item的文件。可以是简简单单的一个文本,也可以是一个图片+文本的较复杂的形式。
2.开始写代码,initView()
因为我写在是在帮大家理清楚listview的代码思路。所以我先从mainActivity开始,实现一个 水果图片+文字的效果。代码如下。
public class ImageList extends Activity {
private List arrayList = new ArrayList();
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.imagelist);
initView();
FruitAdapter fruitadapter = new FruitAdapter(ImageList.this,R.layout.imageitem,arrayList);
listview = (ListView) findViewById(R.id.imagelistview);
listview.setAdapter(fruitadapter);
}
private void initView() {
Fruit apple = new Fruit("apple",R.drawable.p1);
arrayList.add(apple);
arrayList.add(apple);
arrayList.add(apple);
arrayList.add(apple);
arrayList.add(apple);
arrayList.add(apple);
arrayList.add(apple);
arrayList.add(apple);
}
}
看来第一步是要 initView()。
1.做好初始化的工作。在目标xml文件里面添加 ListView。在xml文件里面添加,一个listView控件,记得加上id即可。
2.既然有了一个listview控件了,可以看到里面显示了,一个个的item。现在还是空白的。所以接下来的工作,就是新建一个 xml 文件拿来放置这个item,同样的不要忘记设置 imageView,和TextView的id即可。这里不贴代码了。错了试多几次就好。
3.新建一个类,Fruit.java。代码如下。
public class Fruit {
private String name;
private int imageId;
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
public Fruit(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
}
注意:这里有个技巧(android studio),先把 private String name; private int imageId;这两行写完,右键->generate,会出来写构造方法的,getter和setter的选项。一个个点进去设置好既可以了。 十分方便。
4.arrayList 设置。先new一个List来放置数据,等下的adapter需要用到的。
private List arrayList = new ArrayList();
Fruit apple = new Fruit(“apple”,R.drawable.p1);
arrayList.add(apple);
这样初始化设置就完成了。
Adapter设置
1.新建一个 adapter.java,代码如下。
public class FruitAdapter extends ArrayAdapter {
private int ResoureId;
public FruitAdapter(Context context, int resource, List<Fruit> objects) {
super(context, resource, objects);
ResoureId =resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);
View view;
view = convertView;
if (view==null){
view = LayoutInflater.from(getContext()).inflate(ResoureId,null);}
ImageView imageView = (ImageView) view.findViewById(R.id.fruit_image);
TextView textView = (TextView) view.findViewById(R.id.fruit_name);
imageView.setImageResource(fruit.getImageId());
textView.setText(fruit.getName());
return view;
}
}
2.adapter里面的构造方法有好几种的,这里说明一下各个参数的意义。
FruitAdapter(Context context, int resource, List objects),
context 是当前的上下文对象。resource需要的就是放置 item 的那个xml 的 R.layout.item。objects 传入的就是 上面的那个 arraylist,是作为数据源的。
3.getView()方法的介绍。因为我们需要在当前item里面添加数据。所以首先获取当前的item对象。
4.Fruit fruit = getItem(position);在前面的adapter构造方法中,我们以及把设置好好 arraylist 放到adapter里面了,获取当前的Fruit数据。
5.获取当前的item的view,getview方法里面给出了一个convertView,这个是不能直接用的哦!因为这个view有可能会是NULL,直接用就会报,setAdapter()方法的nullpointExection,记住了哦!
if (view==null){
view = LayoutInflater.from(getContext()).inflate(ResoureId,null);}
收尾工作
在调用initView( ),之后。添加如下代码。
FruitAdapter fruitadapter = new FruitAdapter(ImageList.this,R.layout.imageitem,arrayList);
listview = (ListView) findViewById(R.id.imagelistview);
listview.setAdapter(fruitadapter);
现在发不了结果截图。