一开始先来一个简单的ListView
看一下layout的文件,写了一个ListView。
<LinearLayout xmlns:android="<a target=_blank href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"
xmlns:tools="<a target=_blank href="http://schemas.android.com/tools">http://schemas.android.com/tools</a>"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cn.itcast.listview.MainActivity" >
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></ListView>
</LinearLayout>
然后看一下第一项目的的内容布局。里面是一个TextView
<pre class="html" name="code"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20sp"
android:orientation="vertical" >
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
/>
</LinearLayout>
再来就是java代码.里面用的适配器是BaseAdapter下面的一个子类ArrayAdapter
package cn.itcast.listview;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//条目里面的内容
String[] arr = {"条目一","条目二"};
ListView lv = (ListView) findViewById(R.id.lv);
//创建 一个ArrayAdapter<String>(context, resource, textViewResourceId, objects)适配器,
//context 得到上下方,resource布局文件,textViewResourceId布局文件里的条目的ID,objects条目里面的内容
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv, arr);
//添加 适配器
lv.setAdapter(adapter);
//添加监听方法
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String s = (String) parent.getItemAtPosition(position); //获取条目里的数据的位置
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); //弹出
}
});
}
}
这里只是先简单的写了一个ListView。
但只能显示一个TextView,如果想显示多几个TextView就得用SimpleAdapter
下面的列子就是simpleAdapter的代码,条目里的数据是从数据库里拿出来的,因为这里是说ListView所以数据里的数据我主不粘出来了,
这里是条目里的布局文件、
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/id"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="52dp"
android:text="1"
android:textSize="20sp" />
<TextView
android:id="@+id/name"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="张三"
android:textSize="20sp"
/>
<TextView
android:id="@+id/balance"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
android:text="111"
android:textSize="20sp"
/>
</LinearLayout>
这里是条目的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ListView
android:id="@+id/lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<img width="557" height="508" align="right" style="width: 317px; height: 417px;" src="https://img-blog.csdn.net/20150104004246896?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb0ppYW5MaWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> ></ListView>
</LinearLayout>
下面是SimpleAdapter的代码
public class SilpleActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_layout);
ListView lv = (ListView)findViewById(R.id.lv);
//从数据中查出数据
AccounttDao dao = new AccounttDao(getApplicationContext());
List<Account> accounts = dao.allQuery();
//封装在List中
List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
//遍厉数据中的有多少条数据,创建多少个map来封装对像
for (Account a : accounts) {
Map<String ,Object> map = new HashMap<String, Object>();
map.put("_id", a.getId());
map.put("name", a.getName());
map.put("balanance", a.getBlanance());
data.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, //context 上下文,data List<Map<String,Object>>数据 ,条目里的布局文件
new String[]{"_id","name","balanance"} , //Map中的Key
new int[]{R.id.id,R.id.name,R.id.balance}); //TextView中的id
lv.setAdapter(adapter);
}
}
这里有介绍 一个简单但是好用 的方法//从数据中查出数据,但是过时了,如果数据少可以用这个方法也是不错的先择,效果一样的,布局文件也是一样的,不一样的我粘出来了。
//从数据中查出数据
AccounttDao dao = new AccounttDao(getApplicationContext());
Cursor c = dao.cursorQuery();
//一个过时,但早好用的方法,
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, c,
new String[]{"_id","name","balanance"} , //Map中的Key
new int[]{R.id.id,R.id.name,R.id.balance}); //TextView中的id
lv.setAdapter(adapter);
自己定义的适配器
public class SilpleActivity extends Activity {
private List<Account> lists;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_layout);
//从数据库里查出数据
AccountDao dao = new AccountDao(this);
lists = dao.allQuery();
//得到ListView的ID,添加适配器
ListView lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new MyAdapter());
}
public class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return lists.size();
}
//返回条目,
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return lists.get(position);
}
//返回条目的ID
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return lists.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//从用convertView,当走到下一页的时候就不用再来创建TextView,这里用到三元运算,
//这里的参数null 是父级容器,这里的父级容器是parent,是自己加上去的,所以不用配,如果没有别的父级容器就填null上去
View v = convertView ==null?View.inflate(SilpleActivity.this, R.layout.item, null) : convertView;
TextView tvid = (TextView) v.findViewById(R.id.id); //得到id的TextView
TextView tvname = (TextView) v.findViewById(R.id.name);//得到name的TextView
TextView tvbalanance = (TextView) v.findViewById(R.id.balance);//得到balanance的TextView
final Account a = lists.get(position);
tvid.setText(a.getId()+"");//id是整数,我得把他变成String
tvname.setText(a.getName());
tvbalanance.setText(a.getBlanance());
//设置监听,点击名字弹出名字。
tvname.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(SilpleActivity.this, a.getName(), Toast.LENGTH_SHORT).show();
}
});
return v;
}
}
}