xml布局文件:
<LinearLayout 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:orientation="vertical"
tools:context="com.yin.sqlite.MainActivity" >
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
MainActivity代码:
package com.yin.sqlite;
import java.util.List;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.yin.sqlite.dao.PersonDao;
import com.yin.sqlite.entites.Person;
/**
* 采用ListView+Adapter的方式实现界面滑动:
* 好处:
* 1,第一次进入显示界面时,只需new出界面能显示数目的TextView即可
* 2,当上下滑动界面时,上面或下面的条目消失,但是对象在堆内存中可以复用,滑动后待显示的
* 条目就可以复用消失条目的堆内存空间,避免多次new对象,节省内存
* @author Administrator
*
*/
public class MainActivity extends ActionBarActivity {
private ListView listView;
private List<Person> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取ListView
listView = (ListView) findViewById(R.id.listView);
//查询所有数据返回的list
PersonDao dao=new PersonDao(this);
list = dao.queryAll();
//给ListView设置一个适配器
/**
* 不是一次性的将list的所有元素全加载到listView中,
* 而是通过ListAdapter这个中间件,类似于缓冲器,根据界面是否
* 滑动,舒缓的加载待显示的条目,且消失的条目在堆内存中的对象空间也不会
* 被回收,仍然可以复用。
*/
listView.setAdapter(new MyBaseAdapter());
}
//定义一个类实现BaseAdapter,BaseAdapter implements ListAdapter
class MyBaseAdapter extends BaseAdapter{
/**
* 获取待显示的总条目数,也就是集合的元素数
*/
@Override
public int getCount() {
Log.i("调用getCount", String.valueOf(list.size()));
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
/**
* position:集合总元素的索引,也就是集合中的哪一个元素当前会被作为条目显示到界面
* convertView:复用对象,在堆内存中,也就是上下滑动界面后,消失的条目所占用的那部分
* 堆内存空间。
* parent:就是ListView对象
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//定义一个TextView
TextView textView = null;
//如果convertView不为null,则将convertView赋值给textView,否则new一个TextView
if(convertView!=null){
Log.i("缓存posttion的值", String.valueOf(position));
textView=(TextView) convertView;
}if(convertView==null){
Log.i("新建posttion的值", String.valueOf(position));
textView=new TextView(MainActivity.this);
}
//设置textView的字体大小
textView.setTextSize(20);
//设置textView的文本内容
textView.setText(list.get(position).toString());
ListView v=(ListView) parent;
// Log.i("哈哈id", v.getId()+"");//证明了parent就是布局文件中的ListView
// Log.i("输出", v.toString());
//返回textView,将这个textView加载到ListView显示出来
return textView;
}
}
}