我的学习之旅:android:ListView的初步认识

这是我第一次写博客,目的是为了记录自己学习android过程中的心得,这是我对自定义listview学习的一些认识,

本人觉得还可以,所以就写出来分享一下,希望文章也能对大家的学习有帮助。

首先看一下布局文件,布局文件有两个,一个为listview,另一个为listview_item:

含有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:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listview">
       
    </ListView>

</RelativeLayout>



listview_item的布局文件:

listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/icon"
        android:layout_alignParentLeft="true"/>
    <TextView
        android:id="@+id/area"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/photo"
        android:layout_marginLeft="50dp"
        android:text="960平方米"
        android:layout_alignTop="@+id/icon"/>

    <TextView
        android:id="@+id/money"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/area"
        android:layout_marginLeft="15dp"
        android:layout_toRightOf="@+id/area"
        android:height="25dp"
        android:text="2500万" />

    <TextView
        android:id="@+id/introduce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="临海别墅,领先国际"
        android:layout_marginTop="5dp"
        android:layout_below="@+id/area"
        android:layout_alignLeft="@+id/area"/>

</RelativeLayout>


接着就是要定义一个含有需要填充的变量的类:

这个类中的变量填充的类型如:TextView中用于显示的Text属性,ImageView中显示图片

这个应该很容易看得懂的。

package com.example.mylistview;

import android.graphics.Bitmap;

/**
 *
 * @author St-Eyse 这是listviewitem 的类,在此类中定义好ListView每个项要填充的变量
 *         在此例子中我要填充的是四个变量,此类的编写没什么难点
 *
 */
public class HouseInfo {
 private String area; // 面积
 private String money; // 价格
 private String introduce; // 简介
 private Bitmap icon; // 图标

 public void setArea(final String area) {
  this.area = area;
 }

 public void setMoney(final String money) {
  this.money = money;
 }

 public void setIntroduce(final String introduce) {
  this.introduce = introduce;
 }

 public void setIcon(final Bitmap icon) {
  this.icon = icon;
 }

 public String getArea() {
  return area;
 }

 public String getMoney() {
  return money;
 }

 public String getIntroduce() {
  return introduce;
 }

 public Bitmap getIcon() {
  return icon;
 }

}



然后就到了最关键的一步了;给listview编写适配器

package com.example.mylistview;

import java.util.ArrayList;

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;

public class HouseInfoAdapter extends BaseAdapter {

 // 声明一个list,用于接收在Activity中传过来的list
 ArrayList<HouseInfo> list = new ArrayList<HouseInfo>();
 // 声明一个布局填充器,用于动态布局的填充
 LayoutInflater myInflater = null;
 Demo demo = new Demo();

 public HouseInfoAdapter(final Context context,
   final ArrayList<HouseInfo> list) {
  myInflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  this.list = list;
 }

 @Override
 // 获取list中的内容数量
 public int getCount() {
  if (list == null) {
   return 0;
  }
  return list.size();
 }

 @Override
 // 获取list中子项的内容
 public Object getItem(final int arg0) {
  if (list == null) {
   return null;
  }
  return list.get(arg0);
 }

 @Override
 // 获取list中子项的ID
 public long getItemId(final int position) {
  if (list == null) {
   return 0;
  }
  return position;
 }

 @Override
 // 这个方法是最重要的,每次子项的内容convertView填充完成,都会返回一个View给ViewGroup中的parent,
 // 最终得到整个ListView
 public View getView(final int position, View convertView,
   final ViewGroup parent) {
  // 把布局文件填充到View中
  convertView = myInflater.inflate(R.layout.listview_item, null);
  // 如果convertView为null,就用findViewById的方法自行查找
  if (convertView == null || position < list.size()) {
   demo.area = (TextView) convertView.findViewById(R.id.area);
   demo.money = (TextView) convertView.findViewById(R.id.money);
   demo.introduce = (TextView) convertView
     .findViewById(R.id.introduce);
   demo.icon = (ImageView) convertView.findViewById(R.id.icon);
  } else {
   // 把convertView代表的布局文件给demo,等于demo和convertView共同使用一个布局控件
   demo = (Demo) convertView.getTag();
  }
  // System.out.println("=============" + demo);
  demo.area.setText(list.get(position).getArea());
  demo.money.setText(list.get(position).getMoney());
  demo.introduce.setText(list.get(position).getIntroduce());
  demo.icon.setImageBitmap(list.get(position).getIcon());
  return convertView;
 }

 // 需要填充的Demo,这里是你需要填充的形式,你需要也什么类形填充就在这定义
 public class Demo {
  public TextView area;
  public TextView money;
  public TextView introduce;
  public ImageView icon;
 }

}




最后在Activity中给listview绑定好adapter,并定义一个ArrayList来接收填充的数据,代码如下:

package com.example.mylistview;

import java.util.ArrayList;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ListView;

public class MainActivity extends Activity {
 private ArrayList<HouseInfo> list = new ArrayList<HouseInfo>();
 private ListView listView = null;

 @Override
 protected void onCreate(final Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  getHouse();
  getView();
 }

 // 此方法用于为listview添加适配器
 private void getView() {
  // 找到布局文件中的listview
  listView = (ListView) findViewById(R.id.listview);
  HouseInfoAdapter adapter = new HouseInfoAdapter(MainActivity.this, list);
  listView.setAdapter(adapter);
 }

 // 此方法用来使list填入具体的子项内容,也可以填入数据库中动态的数据
 private void getHouse() {
  for (int i = 0; i < 6; i++) {
   HouseInfo house = new HouseInfo();
   house.setArea("960平方米");
   house.setMoney("2500万");
   house.setIntroduce("临海别墅,引领国际");
   house.setIcon(BitmapFactory.decodeResource(getResources(),
     R.drawable.icon));
   list.add(house);
  }
 }

 @Override
 public boolean onCreateOptionsMenu(final Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}


因为代码中已经有注释,在这里就不在累赘了;

因为我也是android的学习者,有什么理解得不对的,请各位多多指教...




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值