android listview和适配器adapter的使用

该案例是字db http://blog.csdn.net/hxy01245120/article/details/7941237 的基础上完成的

修改personservice业务类 增加字段amount 和添加一个分页查询返回类型为Cursor

修改save方法:

	public void savePerson(Person person) {
		SQLiteDatabase db = dbOpenHelp.getWritableDatabase();
		dbOpenHelp.getReadableDatabase();
		db.execSQL("insert into person(name,amount) values(?,?)", new Object[] { person.getName(), person.getAmount() });
	}

修改分页查询的方法:

public List<Person> findPersonForPage(int offset, int maxResult) {
		List<Person> persons = new ArrayList<Person>();
		SQLiteDatabase db = dbOpenHelp.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from person limit?,?", new String[] { String.valueOf(offset), String.valueOf(maxResult) });
		while (cursor.moveToNext()) {
			Person person = new Person();
			person.setId(cursor.getInt(cursor.getColumnIndex("id")));
			person.setName(cursor.getString(cursor.getColumnIndex("name")));
			person.setAmount(cursor.getInt(cursor.getColumnIndex("amount")));
			persons.add(person);
		}
		cursor.close();
		return persons;

添加发布会cursor对象的分页查询方法:

public Cursor findCursorPersonForPage(int offset, int maxResult) {
		List<Person> persons = new ArrayList<Person>();
		SQLiteDatabase db = dbOpenHelp.getReadableDatabase();
		return db.rawQuery("select id as _id,name,amount from person limit?,?", new String[] { String.valueOf(offset), String.valueOf(maxResult) });
	}

主布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
<!-- 设置标题 -->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/name"
            android:layout_width="100dip"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="姓名"
            android:textSize="25dip" />

        <TextView
            android:id="@+id/id"
            android:layout_width="100dip"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="編號"
            android:textSize="25dip" />

        <TextView
            android:id="@+id/amount"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="金額"
            android:textSize="25dip" />
    </LinearLayout>

    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </ListView>

</LinearLayout>


控制显示的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/id"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20dip" />

    <TextView
        android:id="@+id/name"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20dip" />

    <TextView
        android:id="@+id/amount"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20dip" />

</LinearLayout>

1,使用sampleadapter

package com.itcast.db;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.itcast.db.R;
import com.itcast.model.Person;
import com.itcast.service.PersonService;

import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
	private PersonService personService;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		personService = new PersonService(this);
		ListView listView = (ListView) findViewById(R.id.listView);

		List<Person> persons = personService.findPersonForPage(0, 5);
		List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
		for (Person person : persons) {
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("itemId", person.getId());
			map.put("itemName", person.getName());
			map.put("itemAmount", person.getAmount());
			data.add(map);
		}
		/**
		 * 1:context对象<br>
		 * 2:填充的数据<br>
		 * 3:指定控制显示的xml文件<br>
		 * 4:与上面数据来源中的hashmap中的key相对应,里面的值要跟key值一样<br>
		 * 5:在控制显示xml中文件中对应控件的id值
		 */
		SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.itemview, new String[] { "itemId", "itemName", "itemAmount" }, new int[] { R.id.id, R.id.name, R.id.amount });
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
				ListView listView = (ListView) parent;
				HashMap<String, Object> map = (HashMap<String, Object>) listView.getItemAtPosition(position);
				Toast.makeText(MainActivity.this, String.valueOf(map.get("itemName")) + ":" + String.valueOf(map.get("itemAmount")), Toast.LENGTH_SHORT).show();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
}


2,使用simplecursoradapter

package com.itcast.db;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.itcast.db.R;
import com.itcast.model.Person;
import com.itcast.service.PersonService;

import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
	private PersonService personService;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		personService = new PersonService(this);
		ListView listView = (ListView) findViewById(R.id.listView);
		Cursor cursor = personService.findCursorPersonForPage(0, 5);
		/**
		 * 1:当前activitiy对象<br>
		 * 2:控制显示的布局问价<br>
		 * 3:cursor数据源<br>
		 * 4:查找数据语句是的列明 因为返回的cursor 所以要用select语句的列名<br>
		 * 5:在控制显示xml中文件中对应控件的id值<br>
		 * 用SimpleCursorAdapter的时候 要保证表中有_id字段
		 * android内定表明的主键的列名必须是_id,所以在查询的时候可以把id字段起个别名<br>
		 * 如 select id as _id,name,amount from person limit?,?
		 */
		SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.itemview, cursor, new String[] { "_id", "name", "amount" }, new int[] { R.id.id, R.id.name, R.id.amount });
		listView.setAdapter(cursorAdapter);
		listView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
				ListView listView = (ListView) parent;
				Cursor cursor = (Cursor) listView.getItemAtPosition(position);
				Toast.makeText(MainActivity.this, String.valueOf(cursor.getString(cursor.getColumnIndex("name"))) + ":" + cursor.getInt(cursor.getColumnIndex("amount")), Toast.LENGTH_SHORT).show();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
}

使用simplecursoradapter 是获取数据的sql中要有_id的列或者别名 在new String的时候把_id替换掉原来的列名 不然的话程序会报错




 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值