Android ListView ArrayAdapter 的简单使用
2015-12-08 22:45
393 查看
前面写了3篇关于android的文章,其中的演示程序都写在了一个工程中,当时为了方便测试就在启动页MainActivity中放了3个按钮,点击不同的按钮进入不同的示例程序页面,MainActivity的界面如下截图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/688491fc3130f2ab0469aea051475e01.png)
按照上面的设计,每写一个演示程序就需要在MainActivity中新增一个按钮并为其写点击事件,感觉这样有点麻烦,于是想改进一下,顺便用一下ListView和ArrayAdapter。经过改进后的启动页如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/b8aea183f7bbf3bd911d8bff6f2f538a.png)
新建了一个MainActivity2,用一个ListView来展现演示程序列表,点击相应列表项就跳转到相应的演示页面,功能和之前的MainActivity一样,但之后就不需要不断添加按钮及其点击事件了,只需要为每个演示页面添加一行代码:catalogs.add(new Catalog("演示的名称", 要跳转到的Activity.class)),这样就简洁多了,具体代码如下。
MainActivity2布局文件如下:
MainActivity2 Java代码如下:
在这里还使用了一个自定义的Model类Catalog,用来表示列表中的每一项绑定的数据,其代码如下:
Catalog类中注意的是一定要重写toString方法,不然的话ListView的每一项显示的是“对象的类名+@+hashCode”的组合字符串。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/688491fc3130f2ab0469aea051475e01.png)
按照上面的设计,每写一个演示程序就需要在MainActivity中新增一个按钮并为其写点击事件,感觉这样有点麻烦,于是想改进一下,顺便用一下ListView和ArrayAdapter。经过改进后的启动页如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202003/13/b8aea183f7bbf3bd911d8bff6f2f538a.png)
新建了一个MainActivity2,用一个ListView来展现演示程序列表,点击相应列表项就跳转到相应的演示页面,功能和之前的MainActivity一样,但之后就不需要不断添加按钮及其点击事件了,只需要为每个演示页面添加一行代码:catalogs.add(new Catalog("演示的名称", 要跳转到的Activity.class)),这样就简洁多了,具体代码如下。
MainActivity2布局文件如下:
<?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/lvCatalog" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout>
MainActivity2 Java代码如下:
package chengyujia.demo.aty; import java.util.ArrayList; import java.util.List; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import chengyujia.demo.R; import chengyujia.demo.model.Catalog; public class MainActivity2 extends BaseActivity { private ListView lvCatalog; private List<Catalog> catalogs; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); lvCatalog = (ListView) findViewById(R.id.lvCatalog); init(); } private void init() { catalogs = new ArrayList<Catalog>(); // 为主页目录添加条目,以后每多写一个例子,在这里添加一个条目就可以了。 // 不像以前MainActivity中每多写一个例子,需要添加一个按钮,还要写相应的点击事件。 catalogs.add(new Catalog("屏幕方向", OrientationActivity.class)); catalogs.add(new Catalog("打电话", CallActivity.class)); catalogs.add(new Catalog("版本信息", VersionActivity.class)); // 这里ListView的适配器选用ArrayAdapter,ListView中每一项的布局选用系统的simple_list_item_1。 ArrayAdapter<Catalog> adapter = new ArrayAdapter<Catalog>(this, android.R.layout.simple_list_item_1, catalogs); lvCatalog.setAdapter(adapter); // 通过一个实现OnItemClickListener接口的匿名类的onItemClick方法来处理ListView中每一项的点击事件。 lvCatalog.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { startActivity(new Intent(MainActivity2.this, catalogs.get(position).cls)); } }); } }
在这里还使用了一个自定义的Model类Catalog,用来表示列表中的每一项绑定的数据,其代码如下:
package chengyujia.demo.model; import android.app.Activity; //主页目录列表项 public class Catalog { // 条目名称 public String name; // 点击条目要跳转到的目标Activity的类型 public Class<? extends Activity> cls; // 写个带参数的构造方法,方便赋值使用。 public Catalog(String name, Class<? extends Activity> cls) { this.name = name; this.cls = cls; } // ListView使用ArrayAdapter<T>时每个列表项显示的内容就是T的toString方法返回的值, // 如果这里不重写则会调用父类Object的toString方法。 @Override public String toString() { return name; } }
Catalog类中注意的是一定要重写toString方法,不然的话ListView的每一项显示的是“对象的类名+@+hashCode”的组合字符串。
相关文章推荐
- 静态注册广播接收器
- android5.0自带兼容控件__RecyclerView
- Android适配华为手机虚拟按键显示或隐藏
- Android--文件读写
- 在Android中操作JSON数据-读取JSON格式数据/创建JSON格式数据
- 在Android中操作XML数据-读取与解析XML数据/生成与输出XML数据
- 【Android】Facebook 登陆APP ID获取 android hash key获取,development/ release
- 《Android源码设计模式解析与实战》读书笔记(二)
- 使用 IntelliJ IDEA 开发 Android 应用程序时配置 Allatori 进行代码混淆
- Android Studio——自定义ListView子项目布局
- Android ORM框架GreenDao用法
- Android开发 详解嵌套ListView、ScrollView布局显示不全的问题
- Android 反射实战
- Android-View-绘制
- 读《50 Android Hacks》笔记整理Hack 31~Hack 34
- android中正确保存view的状态
- android Fragment 实现切换卡效果
- 【Android游戏开发二十七】讲解游戏开发与项目下的hdpi 、mdpi与ldpi资源文件夹以及游戏高清版本的设置
- 【Android游戏开发二十六】追加简述SurfaceView 与 GLSurfaceView效率!
- 【Android开发学习笔记】【高级】【随笔】插件化——资源加载