Android之ListView的使用(一)
来源:互联网 发布:网游推荐 知乎 编辑:程序博客网 时间:2024/05/22 06:42
在Android开发中,ListView可以说是最常见的控件之一,几乎所有的应用程序都会用到它,ListView可以说是最常见的控件之一,由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助ListView来实现。
先说一下ListView的简单用法:
创建一个ListViewTest项目,修改activity_main.xml中代码,如下:
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_View"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
修改MainActivity代码,如下:
public class MainActivity extends Activity{
private ListView listView;
private String[] data ={"Apple","Banana","Orange","Watermelon"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayAdapter<String> adapter = newArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,data);
listView = (ListView) findViewById(R.id.list_View);
listView.setAdapter(adapter);
}
}
运行截图:
每一个ListView都需要绑定一个Adapter(适配器),Android提供了很多适配器的实现类,ArrayAdapter比较好用,它可以通过范性来指定要适配的数据类型,然后在构造函数中把要适配的数据传入即可。
ArrayAdapter()构造函数参数依次:当前上下文、ListView的子项目布局id(上面用了一个系统自带的布局),要适配的数据。
最后需要使用setAdapter方法将ListView与数据关联起来。
接下来,定制ListView
以上实现太过单一化,我们来对ListView的界面进行定制,让它可以显示更加丰富的内容。
接着上面的工程,我现在创建一个类Fruit作为ListView适配器的适配类型,
public class Fruit {
private String name;
private int imageId;
public Fruit(String name,int imageId)
{
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
}
Fruit类中有两个属性,分别是name(水果名字),imageId(水果对应图像的Id).
然后我自定义一个子项布局,新建fruit_item.xml,如下
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"android:layout_height="match_parent">
<ImageView
android:id="@+id/fruit_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"/>
</LinearLayout>
这个布局包含一个图片(显示水果图片)和一个文本(显示水果名字)。
接下来我创建一个自定义的适配器FruitAdapter,代码如下:
public class FriutAdapter extends ArrayAdapter<Fruit>{
private int resourceId;
public FriutAdapter(Context context, int resource) {
super(context, resource);
resourceId = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
fruitImage.setImageResource(fruit.getImageId());
fruitName.setText(fruit.getName());
return view;
}
}
FruitAdapter重写了父类的一组构造函数,用于将上下文、ListView子布局id和数据都传进来。另外重写getView()方法,每个子项滚到屏幕内的时候都会被调用。
在getView()方法中,首先通过getItem()方法得到当前项的Fruit实例,然后使用LayoutInflater来为这个子项加载我们传入的布局,接着通过findViewById就能找到布局中相应的控件实例进行操作了。
修改MainActivity中的代码,如下所示:
public class MainActivity extends Activity{
private ListView listView;
private String[] data = {"Apple","Banana","Orange","Watermelon"};
private List<Fruit> fruitList = new ArrayList<Fruit>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ArrayAdapter<String> adapter = newArrayAdapter<String>(this,
// android.R.layout.simple_list_item_1, data);
FriutAdapter myAdapter = newFriutAdapter(this,R.layout.fruit_item,fruitList);
getData();
listView = (ListView) findViewById(R.id.list_View);
listView.setAdapter(myAdapter);
}
private void getData() {
Fruit apple = new Fruit("Apple",R.drawable.apple);
fruitList.add(apple);
Fruit banana = new Fruit("Banana",R.drawable.banana);
fruitList.add(banana);
Fruit orange = new Fruit("Orange",R.drawable.orange);
fruitList.add(orange);
Fruit watermelon = newFruit("Watermelon",R.drawable.watermelon);
fruitList.add(watermelon);
}
}
getData()函数将水果的数据初始化,然后创建自定义适配器与ListView绑定。
运行截图:
下一章,我将分析一下ListView的优化问题。
- Android之ListView的使用(一)
- Android中ListView的使用(一)
- Android中ListView的使用(一)
- android ListView的使用 (一)
- android 之 listview (一)
- android 之listview(一)
- Android之ListView的使用
- Android 之 ListView (一)
- Android之Listview(一)
- Android的UI组件之ListView(一)
- android学习笔记一(ListView的使用)
- android 常用控件listview的使用(一)
- Android中ListView的使用(一)----- 简单填充数据
- ListView的使用(一)
- android之listview使用方法(一)
- Android控件之ListView(一)
- Android控件之ListView(一)
- Android控件之ListView(一)
- Python的进程、线程、协程
- 正则表达式matcher.group用法
- ubuntu下CUDA编译的GCC降级安装
- POI导出Excel强制换行
- 配置Samba文件共享服务器
- Android之ListView的使用(一)
- Excel -- 排序与排名
- 多线程---模拟多人通过山洞
- 【性能优化】Hive优化
- 没有磨砺过的锋芒是无知,撑得起你骄傲的只有实力
- 牛逼的正则表达式(1)---匹配语法
- android 广播 动态/静态 内部类形式
- elasticsearch安装
- [注意]未做的题(强连通分量)