Android用户界面设计:“.NET研究”创建列表视图程序

简介:   列表视图(ListView)是Android平台下用于显示不定数量的数据最有用的视图控件之一。在这个教程中,我们将向你展示如何使用ListView来浏览文章列表。  在之前的文章中,你看到了许多关于不同布局控件的教程。

  列表视图(ListView)是Android平台下用于显示不定数量的数据最有用的视图控件之一。在这个教程中,我们将向你展示如何使用ListView来浏览文章列表。

  在之前的文章中,你看到了许多关于不同布局控件的教程。在今天这个教程中,你将结合使用它们。应用程序本身非常简单:它将显示文章标题列表,当点击标题时,显示文章内容。这篇文章的节奏将比我们的入门教程更快一些。如果你对基本的Android控件或概念不熟悉你可能需要复习这个网站上我们其它的一些教程,甚至是Android API参考。最终的开源代码可以在Google code上下载到。

  步骤0: 创建项目

  在Eclipse中创建一个新的Android项目。我们将项目命名为MT-List,起始活动命名为TutListActivity。这个Activity必须继承ListActivity类,它是一个特殊的Activity类,用于帮助管理ListView控件。我们使用的是Android2.3.3的API。

  步骤1: 设计列表界面

  实际上,这一步要做的很少。一个由重复项组成的ListView控件,每一项都有相同的布局(一项一个模板)。我们想要显示一个文章标题列表。每个标题都是ListView中的一项。因此,每个列表项的模板只需要一个TextView控件。在你的项目中添加一个叫做list_item.xml布局资源文件,它描述了列表中的每一项的模板布局。在这个例子中,它看起来可能像这样:

  
  
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< TextView
xmlns:android
= " http://schemas.android.com/apk/res/android "
android:layout_width
= " fill_parent "
android:layout_height
= " wrap_content "
android:textSize
= " 24dp "
android:padding
= " 6dp " />

  字号加上填充属性值要确保在平均大小的屏幕下列表每一项对于平均手指的大小来说是足够大的触摸目标。

  步骤2: 为ListView填充数据

  ListView控件设计用于从数据源加载数据。可以使用适配器从数据库,数组或其它数据源读取数据。在这个程序中我们使用数组作为数据源。今后,你可以将数组替换为某些实时数据源。在你的项目中创建两个字符串数组(你可以将他们添加到strings.xml或者一个分离的arrays.xml文件,随你愿意)。将一个数组取名为“tut_titles”,另一个名为“tut_links”。用网站上的有效的标题和URL填充这两个数组。下面是我们的数组:

  
  
< string - array name = " tut_titles " >
< item > Design & amp; Build a 1980s iOS Phone App: Design Comp Slicing </ item >
< item > Best of Tuts + in February 2011 </ item >
< item > Create a Brick Breaker Game with the Corona SDK: Game Controls </ item >
< item > Exporting Graphics for Mobile Apps: PNG or JPEG ?</ item >
< item > Android Tablet Design </ item >
< item > Build a Titanium Mobile Pizza Ordering App: Order Form Setup </ item >
< item > Create a Brick Breaker Game with the Corona SDK: Application Setup </ item >
< item > Android Tablet Virtual Device Configurations </ item >
< item > Build a Titanium Mobile Pizza Ordering App: Topping Selection </ item >
< item > Design & amp; Build a 1980s iOS Phone App: Interface Builder Setup </ item >
</ string - array >
< string - array name = " tut_links " >
< item > http: // mobile.tutsplus.com/tutorials/mobile-design-tutorials/80s-phone-app-slicing/</item>
< 上海闵行企业网站设计与制作item > http: // mobile.tutsplus.com/articles/news/best-of-tuts-in-february-2011/</item>
< item > http: // mobile.tutsplus.com/tutorials/corona/create-a-brick-breaker-game-with-the-corona-sdk-game-controls/</item>
< item > http: // mobile.tutsplus.com/tutorials/mobile-design-tutorials/mobile-design_png-or-jpg/</item>
< item > htt上海网站建设p: // mobile.tutsplus.com/tutorials/android/android-tablet-design/</item>
< item > http: // mobile.tutsplus.com/tutorials/appcelerator/build-a-titanium-mobile-pizza-ordering-app-order-form-setup/</item>
< item > http: // mobile.tutsplus.com/tutorials/corona/corona-sdk_brick-breaker/</item>
< item > http: // mobile.tutsplus.com/tutorials/android/android-sdk_tablet_virtual-device-configuration/</item>
< item > http: // mobile.tutsplus.com/tutorials/appcelerator/pizza-ordering-app-part-2/</item>
< item > http: // mobile.tutsplus.com/tutorials/iphone/1980s-phone-app_interface-builder-setup/</item> 上海闵行企业网站制作style="color: #008000;">
</ string - array >

  当然这个数据是静态的。在一些情况下,使用静态数据对于一个ListView来说也是有意义的。对于这些情况,使用一个字符串数组资源非常简单和方便。需要确保标题和链接的排序是一致的,这样两个数组才能匹配。

  步骤3: 将数组适配到ListView

  现在程序已经有数据了,现在来显示它们。回到TutListActivity.java,修改onCreate()方法,使用setListAdapter()方法来加载数据。和常规的活动不一样,对于整个活动就仅仅只是一个ListView的情况,ListActivity不需要使用setContentView()。完成后,你的整个ListActivity将看起来像这样:

  
  
public class TutListActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setListAdapter(ArrayAdapter.createFromResource(getApplicationContext(),
R.array.tut_titles, R.layout.list_item));
}
}

  这时候,你已经可以运行这个程序了。你将看到一个具有所有本教程中所有标题的ListView。上划和下划都正常。但是,点击标题还没有任何反应。

  步骤4:处理ListView条目点击

  处理ListView中条目的点击与其它视图对象的处理方式相似:使用侦听器(listener)。在这里,我们关注OnTimeClickListener。你可能注意到我们还没有直接处理过ListView对象。现在是时候了。在ListActivity中,简单地调用getListView()方法来遍历ListView,然后调用setOnItemClickListener()方法并且一次性实现它们:

  
  
getListView().setOnItemClickListener( new OnItemClickListener() {
@Override
public void onItemClick(AdapterView <?> parent, View view,
int position, long id) {
// TBD
}
});

  onItemClick()方法会在用户每次点击列表视图中的每一项时被调用。为了方便,它可以传入几个有用的参数,其中一个我们需要它来启动查看器活动(viewer activity)。等等,什么是查看器活动?

  步骤5:创建查看器活动

  非常好的问题。让我们现在就来创建一个查看器活动!这个活动将用于向用户显示教程内容。通过继承Activity创建一个新的类,并把它命名为TutViewerActivity.java。为它创建一个布局资源文件,文件只包括一项:一个WebView控件。布局文件应该看起来如下:

  
  
<? xml version = " 1.0 " encoding = " utf-8 " ?>
上海企业网站设计与制作e="color: #000000;">< WebView
xmlns:android
= " http://schemas.android.com/apk/res/android "
android:layout_width
= " match_parent "
android:layout_height
= " match_parent "
android:id
= " @+id/tutView " >
</ WebView >

  在TutViewerActivity类的onCreate()方法中,调用setContentView()方法并将这个布局传入。最后,不要忘了将这个活动添加到你的AndroidManifest.xml 文件。

  步骤6:启动Details Activity

  注意力回到TutListActivity一会。让我们看看我们需要做什么来启动这个查看器Activity显示合适文章链接。在onItemClick()方法中,被点击项的位置被作为一个int型的值传入。这就是我们需要用来访问文章链接数组的值。
  链接数组里的字符串值是URL。传递URL到另一个活动的简便方法是通过setData()方法向Intent添加一个Uri。下面是onItemClick()的最终实现,它启动查看器活动,传入合适的URL:

  
  
@Override
public void onItemClick(AdapterView <?> parent, View view,
int position, long id) {
String content
= links[position];
Intent showContent
= new Intent(getApplicationContext(),
TutViewerActivity.
class );
showContent.setData(Uri.parse(content));
startActivity(showContent);
}

  如果你只是将这些代码直接粘贴到onCreate()方法的最后面,你会注意到links变量还没有定义。因为它将用于OnItemClickListener类,变量必须是一个final值,如下:

  
  
final String[] links = getResources().getStringArray(R.array.tut_links);

  这一行必须放在OnItemClickListener的定义之前。是的,你可以将它定义成非final的成员变量。对于更复杂的情况,那样做甚至是必须的。但是在这里,我们可以在方法中放置所有代码。
  现在如果你运行这个程序,你将得到一个空白的查看器界面。活动正确地启动了,但是我们需要去连接查看器活动来在WebView控件中加载URL。

  步骤7:加载URL

  注意力回到TutViewerActivity.java文件。在调用setContentView()方法之后,添加代码,在传入的Intent中检索Uri并将它转换成String变量。然后将一个调用添加到WebView类的loadUrl()方法。整个TutViewerActivity类的代码将看起来像这样:

  
  
public class TutViewerActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.tut_view);
Intent launchingIntent
= getIntent();
String content
= launchingIntent.getData().toString();
WebView viewer
= (WebView) findViewById(R.id.tutView);
viewer.loadUrl(content);
}
}

  现在再运行程序。正常了么?还没有!最后一个细节:你必须把网终权限添加到AndroidManifest.xml文件。现在运行这个程序,你将看到程序正常运行了:

  步骤8:改善体验(可选)

  目前来看,用户体验只是做到了仅仅是可以用。ListView展示所有文章标题,用户可以点击列表某一项并且可以转到一个带有WebView控件的活动来展示合适的URL的内容。为了将这个最基本的实现变得更优雅一些你可能考虑以下几个方面:

  • 设置浏览视图的初始缩放以应对接来的缩放
  • 配置WebView使其包含更多增强浏览体验的控件
  • 动态加载文章列表,而不是使用静态数组
  • 为ListView添加特效视觉效果
  • 充分利用大屏幕
  • 上海徐汇企业网站制作i>向ListView增加附加的信息:副标题,难度级别,图标,已读指示,收藏按钮等。

  总结

  ListView小工具是在界面上以列表形式组织数据的快速方式。在这个教程中我们只是接触到ListView控件的最表层。然而,你学到了最基础的:创建列表项,使用数据适配器,以及处理列表项点击。

目录
相关文章
|
2月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
156 13
|
4月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
61 1
|
4月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
221 0
|
5月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
5月前
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
|
5月前
|
Ubuntu 持续交付 API
如何使用 dotnet pack 打包 .NET 跨平台程序集?
`dotnet pack` 是 .NET Core 的 NuGet 包打包工具,用于将代码打包成 NuGet 包。通过命令 `dotnet pack` 可生成 `.nupkg` 文件。使用 `--include-symbols` 和 `--include-source` 选项可分别创建包含调试符号和源文件的包。默认情况下,`dotnet pack` 会先构建项目,可通过 `--no-build` 跳过构建。此外,还可以使用 `--output` 指定输出目录、`-c` 设置配置等。示例展示了创建类库项目并打包的过程。更多详情及命令选项,请参考官方文档。
340 11
|
6月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
6月前
|
开发框架 NoSQL .NET
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
使用 Asp.net core webapi 集成配置系统,提高程序的灵活和可维护性
|
6月前
|
Android开发
解决Android、Flutter编译时Gradle报错:javax.net.ssl.SSLException: Connection reset
解决Android、Flutter编译时Gradle报错:javax.net.ssl.SSLException: Connection reset
708 0
|
6月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
134 2

热门文章

最新文章

  • 1
    yum install -y net-snmp-devel 安装不成功 zabbix项目安装,Errors during downloading metadata for repository ‘extras-common’:问题解决方案-优雅草卓伊凡
  • 2
    RT-DETR改进策略【Neck】| ArXiv 2023,基于U - Net v2中的的高效特征融合模块:SDI(Semantics and Detail Infusion)
  • 3
    高性能网络SIG双月度动态: 三年磨一剑,virtio-net AF_XDP 完成 Linux 主线零拷贝支持
  • 4
    YOLOv11改进策略【Neck】| ArXiv 2023,基于U - Net v2中的的高效特征融合模块:SDI(Semantics and Detail Infusion)
  • 5
    YOLOv11改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
  • 6
    RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
  • 7
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 8
    Android历史版本与APK文件结构
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 10
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    14
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    28
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    34
  • 4
    Android历史版本与APK文件结构
    121
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 7
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    60
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 9
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 10
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    121