listview+adapter+arrayList串讲

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);

现在发不了结果截图。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值