上一篇讲到用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开发中,ListView是一个非常重要的组件,常用于展示大量数据列表。这篇开发笔记将深入讲解如何使用ListView以及其中的一些关键知识点。 首先,ListView的工作原理是通过Adapter来连接数据源和视图。当我们...
本自学笔记将重点讲解如何在Android项目中创建并使用ListView,包括基本的设置、数据绑定和适配器的使用。 首先,我们需要在布局文件中添加ListView元素。在XML布局文件中,通过`<ListView>`标签定义ListView,可以...
- **用户界面**: 使用Android Studio的布局编辑器设计用户界面,包括输入框、按钮和列表视图等。 - **事件监听**: 为UI元素设置监听器,响应用户的操作,如点击按钮保存笔记。 - **Intent**: Android系统中的消息...
6. UI设计和组件:Android平台提供了丰富的UI组件,如按钮、文本框、列表视图等,开发者可以利用这些组件创建直观、易用的用户界面。 7. 应用开发实践:通过实例演示和样例代码,教程将教授如何开发一个Android应用...
除了核心的MVP架构,此应用还会用到Android的一些关键组件,例如`Activity`作为应用程序的主要入口点,`Intent`用于启动其他组件或传递数据,`RecyclerView`用于显示笔记列表,`Adapter`将数据绑定到列表视图,`...
同时,可能还用到了EditText用于输入笔记内容,Button用于触发操作,RecyclerView或者ListView用于显示笔记列表。通过适配器(Adapter)将数据与视图绑定,可以动态加载和更新列表内容。 此外,事件监听和回调机制...
在Android开发中,Spinner是一个非常重要的基本视图组件,它为用户提供了一个下拉选择菜单,通常用于展示一组有限的选项。本篇学习笔记将深入探讨Spinner的使用、工作原理以及如何自定义它来满足特定需求。 一、...
2. **插入数据**:使用SQLiteDatabase对象的insert()方法,将用户的笔记保存到数据库中。例如: ```java public void insertDiary(String title, String content, String date) { SQLiteDatabase db = this....
使用Android Studio内置的布局编辑器(XML)设计笔记APP的用户界面,通常包括主界面、笔记列表视图、笔记详情视图以及添加/编辑笔记的界面。可以利用RecyclerView展示笔记列表,EditText用于输入笔记内容,Button...
在这个demo中,可能会看到如何在ListView中显示SQLite数据库中的笔记列表,包括设置适配器,处理点击事件等。 在这个"Android记事本-demo"中,开发者可能还会涉及到UI设计,使用XML布局文件创建界面,以及使用...
6. `Android_L_Notes.psd`:代表笔记应用的设计,可能包含笔记列表、新建笔记的界面,以及编辑和查看笔记的功能。 7. `Android_L_Travel.psd`:可能是一个旅行相关的界面,如行程规划、目的地介绍等,可能包含地图...
标题和描述提及了“新版Android开发教程+笔记七--基础UI编程1”,以及“安卓开发必备”,因此本篇内容将主要围绕Android基础UI编程展开。 Android UI编程是构建Android应用界面的核心部分。它涉及到使用各种布局和...
当需要在一个视图中展示列表数据时,适配器起着桥梁作用,它将数据集转换成可显示的视图列表,如ListView、RecyclerView等。适配器可以是ArrayAdapter、CursorAdapter等,它们根据不同的数据源来填充视图。 9. **...
Adapter负责将数据源(如数组或数据库查询结果)转换为视图列表,这样用户就能在界面上滚动查看和交互。适配器模式使得数据更新和界面显示保持解耦,提高了代码的灵活性和可复用性。 此外,Android提供了丰富的动画...
首先,DroidDraw提供了丰富的预定义组件,如按钮、文本框、图像视图、列表视图等,这些都是构建Android应用界面的基本元素。开发者可以通过选择这些组件,直接在设计画布上放置,省去了手动编写布局XML的繁琐步骤。 ...
同时,这份笔记可能还会涵盖如何使用Adapter来连接数据源和ListView、RecyclerView等列表视图,实现数据的动态加载和滚动效果。 最后,"新版Android开发教程&笔记四--Dalvik ADB.pdf"讲解了Dalvik虚拟机和Android ...
Android提供了丰富的UI组件,如按钮(Button)、文本框(EditText)、列表视图(ListView)、网格视图(GridView)等。通过组合这些组件,开发者可以创建出复杂的用户交互。 六、事件处理 Android使用监听器...
【Android代码-Knote】是关于开发一款名为Knote的简单Android笔记应用的源代码库。这个项目主要关注Android平台上的应用程序开发,旨在提供一个轻量级、用户友好的笔记工具。下面将详细介绍在这个项目中涉及的...
2. **时间轴视图(TimeBar)**:实现TimeBar需要理解Android的View和ViewGroup,可能用到了自定义View或者自定义ViewGroup来创建时间轴效果,涉及到绘图操作,如使用Canvas和Paint类。 3. **数据结构**:为了存储和...