Android学习笔记之ListView
一.ListView使用
1.先在xml里面创建ListView控件
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
2.在主Activity中绑定并设置适配器,通过add方法添加列表项。
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);//android.R.layout.simple_list_item_1系统资源
adapter = new ArrayAdapter<ListCellData>(this, R.layout.list_cell);//自定义
lv = (ListView) findViewById(R.id.listView);
lv.setAdapter(adapter);
adapter.add(new ListCellData("小明", "男", 15));
lv.setOnItemClickListener(this);
adapter.add("hello");
adapter.add("world");
}
3.通过onItemClick方法可以设置列表项被点击的事件。
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
ListCellData data = adapter.getItem(position);
Toast.makeText(this, String.format("名字:%s, 性别:%s, 年龄: %d", data.getUserName(), data.getSex(), data.getAge()), Toast.LENGTH_SHORT).show();
}
二.通过BaseAdapter创建有图标的ListView
public class CustomListViewAdapter extends BaseAdapter
{
private Context context = null;
public CustomListViewAdapter(Context context)
{
this.context = context;
}
public Context getContext()
{
return context;
}
private CustomListCellData[] data = new CustomListCellData[]{
new CustomListCellData("img1", "dec img1", R.drawable.img1),
new CustomListCellData("img2", "dec img2", R.drawable.img2),
new CustomListCellData("img3", "dec img3", R.drawable.img3)
};
// private String[] data = new String[]{"eoe1","eoe2","eoe3","eoe4","eoe5","eoe6","eoe7","eoe8"};
@Override
public View getView(int position, View convertView, ViewGroup parent) //在呈现列表项的时候都会被执行
{
// TextView tv = null;
//
// if (convertView != null)
// {
// tv = (TextView) convertView;
// }
// else
// {
// tv = new TextView(CustomListView.this);
// }
//
// tv.setTextSize(30);
// tv.setText(getItem(position));
// return tv;
LinearLayout ll = null;
if(convertView != null)
{
ll = (LinearLayout) convertView;
}
else {
ll = (LinearLayout) LayoutInflater.from(getContext()).inflate(R.layout.custom_listcell, null);
}
CustomListCellData data = getItem(position);
ImageView icon = (ImageView)ll.findViewById(R.id.icon);
TextView name = (TextView) ll.findViewById(R.id.name);
TextView dec = (TextView) ll.findViewById(R.id.dec);
icon.setImageResource(data.iconId);
name.setText(data.name);
dec.setText(R.id.dec);
return ll;
}
@Override
public long getItemId(int position)
{
return position;
}
// @Override
// public String getItem(int position)
// {
// return data[position];
// }
@Override
public CustomListCellData getItem(int position)
{
return data[position];
}
@Override
public int getCount()
{
return data.length;
}
}
其中getView方法在呈现列表项的时候都会被执行。
关于LayoutInflater用法,详见博客LayoutInflater详解。
然后创建一个ListViewActivity调用这个适配器
public class CustomListViewActivity extends ListActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_listview_aty);
setListAdapter(new CustomListViewAdapter(this));
}
}
或者通过普通的activity来绑定ListView控件来实现适配器
public class CustomListView extends Activity
{
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_listview);
lv = (ListView) findViewById(R.id.lv);
lv.setAdapter(new CustomListViewAdapter(this));
}
}