上一篇讲到用ArrayAdapter和ListView合作实现列表视图,不过ArrayAdapter的项只是简单的字符串,这一次要现实自定义的类。
我想做这样一件事情:程序的主界面是一个列表视图,里面的每一项代表一个Activity,当我点击这一项时,就自动运行这个Activty。
我们修改前面的例子来完成功能:
1. 写一个自定义类,作为ArrayAdapter的项:
MainForm.java
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> // 运行Activity的必要信息
class DemoActivityInfo
{
public DemoActivityInfo(Context context, Class<?> cls, int strId)
{
mStrId = strId;
mClass = cls;
mContext = context;
}
public DemoActivityInfo(Context context, Class<?> cls, String desc)
{
mDesc = desc;
mClass = cls;
mContext = context;
}
@Override
public String toString()
{
// 这个会在列表视图里面显示
if (mDesc == null)
mDesc = mContext.getString(mStrId);
return mDesc;
}
public String mDesc;
public Class<?> mClass;
private int mStrId;
private Context mContext;
}
该类的几个成员:
mDesc Activity的描述,从toString()返回,显示在列表视图里。
mClass 代表要运行的Activity,等下调用startActivity时要用到。
mStrId 资源ID,允许描述定义在资源文件里,然后通过Context.getString(resId)取回字符串。
mContext 环境类
2. 修改MainForm的onCreate函数:
MainForm.java
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 取得ListView
mListView = (ListView)findViewById(R.id.listview_main);
// 创建一个ArrayAdapter
ArrayAdapter<DemoActivityInfo> uiDemoList =
new ArrayAdapter<DemoActivityInfo>(this, R.layout.textview_item, mDemoList);
mListView.setAdapter(uiDemoList);
// 使ListView支持过滤搜索
mListView.setTextFilterEnabled(true);
// 设置事件
mListView.setOnItemClickListener(mItemClickListenter);
}
主要是修改ArrayAdapter的类型参数,变成DemoActivityInfo,这一变mDemoList的类型也要跟着变了:
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> private DemoActivityInfo [] mDemoList =
{
new DemoActivityInfo(this, CheckListView.class, R.string.clv_title)
};
我们以后有新的Activity只需要往后面增加就行了。
3. 修改项点击事件,改变运行一个Activity:
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> private OnItemClickListener mItemClickListenter = new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
// 运行Activity
startActivity(new Intent(MainFrom.this,
MainFrom.this.mDemoList[position].mClass));
}
};
4. 我们完成了MainForm的修改,但还需要增加一些东西,比如:
new DemoActivityInfo(this, CheckListView.class, R.string.clv_title)
里面的R.string.clv_title,这是一个字符串资源,增加起来很简单,在res/values/strings.xml直接增加就可以了:
strings.xml
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> <?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MainFrom!</string>
<string name="app_name">界面测试工程</string>
<string name="clv_title">带有复选框的列表视图</string>
</resources>
我们还得增加CheckListView这个Activity,这稍微有点烦琐,但并不麻烦:
*. 先增加一个layout文件,前面已经讲过如何增加,不再描述,只给出文件内容:
checklistview.xml
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> <?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ListView>
*. 新建一个类:
*. 右键src选择New/Class
*. 在弹出来的对话框中输入下面的信息:
Package处输入包名,我这里是: colin.demo
Name处输入类名:CheckListView
SuperClass处输入父类,点旁边的Browser可以快速搜索父类:android.app.Activity
最后点击Finish完成。
*. 完成后就多了一个CheckListView类,我们覆盖它的onCreate方法,把刚才增加的Layout设进来:
CheckListView.java
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> package colin.demo;
import android.app.Activity;
import android.os.Bundle;
public class CheckListView extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.checklistview);
}
}
*. 最后一步,把这个Activity类加到AndroidManifest.xml里面
由于该类是内部使用,因此不需要Intent-filter,所以可以写得比较简单:
在manifest/application元素下面,增加一个Activity子元素,
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> <activity android:name=".CheckListView"
android:label="@string/clv_title">
</activity>
5. 经过上面的努力,应该可以运行看一下效果了:
上图看到CheckListView只是一个空白的界面,从它的名字看来,是要做一个带有复选框的列表视图了,这是下一篇的主题,敬请期待!
分享到:
相关推荐
口袋笔记-- 一个简单的记事本app,具有多色彩主题,自带日历视图,记事可以是列表显示也可以是网格显示,提醒功能,隐私保护功能等。项目地址:https://github.com/channguyen/pocket-note-android 效果图:
Android-orgzly-android.zip,用于记录笔记和管理待办事项列表的大纲视图,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。
为了在 Eclipse 中创建应用程序,选择 File > New > Android project,这将启动 New Android Project 向导。 图 5. New Android project 向导 接下来,创建一个简单的应用程序,该应用程序有一个活动,并且在 ...
Android-ObservableScrollView 用于观察可滚动视图... 安装: $ ./gradlew installDebug 支持的小部件小工具自从笔记列表显示v1.0.0 滚动视图v1.0.0 网页视图v1.0.0 回收器视图v1.1.0 它受支持,但 RecyclerView 使用On
丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids), 文本框(text boxes),按钮( buttons), 甚至可嵌入的web 浏览器。 ; 内容提供器(Content Providers)使得应用...
此应用中使用的 Android 功能: 活动碎片列表视图阵列适配器ViewPagers 对话框媒体播放器录音媒体播放器音频播放SurfaceView、SurfaceHolder、Surface 相机使用保存和加载文件外置储存JSON 上下文菜单动作条##...
笔记有一个上下文菜单,可通过在列表视图中长按笔记标题来访问,大多数屏幕都有一个选项菜单,可通过按 Android 设备上的“菜单”按钮访问。 v1.06 增加了从 SD 卡导入笔记。 v1.05 增加了升序和降序排序。
主管助手-犯罪笔记Android App 犯罪记录是一款可跟踪日常犯罪的应用程序,包括标题,图片,日期,单击呼叫以挑选嫌疑人并分享案件。 内置的RecyclerView可以保存犯罪列表,而ViewPager可以保存案件片段,从而可以在...
这是我按照 CodePath 的 [演练] ( ) 创建基本 Todo 列表的第一个 Android 演示应用程序 #####Time 花费:总共花费 2 小时 #####已完成的用户故事: 必需:用户可以在启动应用程序时查看现有项目的列表。 必需:...
通过移动面板以垂直降价视图查看笔记 标记的降价突出显示和降价预览模式 拼写检查支持 便笺从便笺文本的第一行获取其名称(就像在ownCloud notes Web应用程序中一样),并且如果第一行更改,便笺文本文件会...
代码路径 Android 训练营的待办事项列表应用程序准备工作 ... 使用自定义适配器修改了列表视图的样式。 添加“普通优先级”和“高优先级”设置。 将 SQLite 用于持久性而不是平面文件。 笔记: 使用创建的 GIF。
一个 Android 待办事项...使用自定义适配器改进列表中待办事项的样式 添加对待办事项的完成截止日期的支持并在列表视图项目中显示 用创建的 GIF笔记接下来要处理的项目: 使用 DialogFragment 而不是新活动来编辑项目
Gallery(画廊)是一个锁定中心条目并且拥有水平滚动列表的视图,一般用来浏览图片,并且可以响应事件显示信息。Gallery还可以和ImageSwitcher组件结合使用来实现一个通过缩略图来浏览图片的效果。 Gallery常用的XML...
一.菜单 1.创建菜单 菜单是 UI 的重要组成部分,由一组命令组成,这些... 弹出菜单: 以附加到视图的垂直列表形式显示项的列表: 2.创建选项菜单 选项菜单包括某个活动的基本操作和必要导航项目 可以在 XML 菜单资源中
笔记: 依赖注入(Dagger)和视图注入(Butterknife) 可重用的自定义适配器,使用 RecyclerView,带有 Header View 交易列表 UI 的可重用自定义组件谷歌地图关注点分离使用 Jackson 库的 Json 解析器。 集中造型。 ...
•创建新的空白PDF并使用 Xodo 记笔记 Dropbox 和 Google Drive Sync •将注释自动同步到 Dropbox 或 Google Drive •对于 Dropbox,仅通过上传您所做的更改而不是整个文档来最大限度地减少数据使用 文件管理器 •...
一个基本的android应用程序,用于显示课程列表和与每个课程相关的注释。 先决条件 模拟器运行在API级别29的Android Studio 回收器视图,导航抽屉,linearLayoutManager和gridlayoutmanager的基础知识。 项目流程 ...
列表视图/拆分视图 + 详细视图 侧边菜单 Api 调用示例 怎么跑 假设您的 ionic / cordova 环境已经设置: 添加平台: cordova platform add android/ios 安装插件: cordova plugin add org.apache.cordova....
这是一个 Android 演示应用程序,它使用文件系统来存储绑定到基本列表视图和编辑视图的模型。 花费时间:共花费2小时 完成的用户故事: 必需:用户可以查看待办事项列表 要求:用户可以在 TODO 项目列表中创建新...
有关创建此应用程序的分步教程,请参阅。 花费时间:总共花费25小时 完成的用户故事: 必需:用户一一添加待办事项。 必需:用户可以通过长按一个项目来删除一个待办事项。 必需:用户可以通过单击一个项目来...