Android UI控件组合应用之一:建立数据模型
创始人
2024-07-29 08:11:23
0次

Android在UI部分为应用程序开发人员提供了极大的便利和灵活性,在此就不一一列举了,本文拟通过一个小例子窥见一斑。

很多用过新浪微博手机客户端Android版本的童鞋想必都对其主界面的效果印象深刻,见下左图:

从图中可以看到,主体的列表框是个很复杂的部分,既要能显示头像、微博内容,又要能在微博内容中显示表情、图片、@某人、URL,这些元素混杂在一起,对于某些平台的UI开发来讲,简直太难了。但在Android上来开发,确实很容易实现,右图就是本程序的运行结果,重点展现了列表框部分的仿照。当然,所用的图片都是来自于新浪的了。

下面,我们就一起来看一下这个效果的代码实现。

首先,需要定义数据模型,主要的数据抽象是Site、Blog、User,分别代表网站、博文、用户,数据模型如下图所示:

具体成员的含义就不解释了。如果你没用过新浪微博,建议去用一下,或者可以参考http://open.weibo.com/中的开发文档。

这几个类的代码如下:

  1. view plaincopy to clipboardprint?  
  2. package com.wenbin.test.site;    
  3.     
  4. public class User{    
  5.     private String profileImageUrl="http://tp3.sinaimg.cn/1500460450/50/1289923764/0";    
  6.     private String screenName="测试";    
  7.     private boolean verified=false;    
  8.     
  9.     public User(){    
  10.             
  11.     }    
  12.     
  13.     public String getProfileImageUrl(){    
  14.         return profileImageUrl;    
  15.     }    
  16.     
  17.     public String getScreenName(){    
  18.         return screenName;    
  19.     }    
  20.     
  21.     public void setProfileImageUrl(String profileImageUrl) {    
  22.         this.profileImageUrl = profileImageUrl;    
  23.     }    
  24.     
  25.     public void setScreenName(String screenName) {    
  26.         this.screenName = screenName;    
  27.     }    
  28.     
  29.     public void setVerified(boolean verified) {    
  30.         this.verified = verified;    
  31.     }    
  32.     
  33.     public boolean isVerified(){    
  34.         return verified;    
  35.     }    
  36. }   

 

 

  1. view plaincopy to clipboardprint?  
  2. package com.wenbin.test.site;    
  3.     
  4. import java.util.Date;    
  5.     
  6. public class Blog implements Comparable{    
  7.     
  8.     private Date createAt=new Date(System.currentTimeMillis());    
  9.     private Blog retweetedBlog;    
  10.     private String text="就算把我打的遍体鳞伤也见不得会[泪]?http://blog.csdn.net/caowenbin @移动云_曹文斌 。";    
  11.     private String smallPic="";    
  12.     private String source="IE9";    
  13.     private User user;    
  14.     private Site site;    
  15.     
  16.     public Blog(){    
  17.     
  18.     }    
  19.         
  20.     public Blog(Site site){    
  21.         this.site=site;    
  22.     }    
  23.     
  24.     public boolean isHaveRetweetedBlog(){    
  25.         return retweetedBlog!=null;    
  26.     }    
  27.         
  28.     public Blog getRetweetedBlog(){    
  29.         return retweetedBlog;    
  30.     }    
  31.     
  32.     
  33.     public String getText(){    
  34.         return text;    
  35.     }    
  36.     
  37.     public User getUser(){    
  38.         return user;    
  39.     }    
  40.         
  41.     public String getSmallPic(){    
  42.         return smallPic;    
  43.     }    
  44.     
  45.     public void setRetweetedBlog(Blog retweetedBlog) {    
  46.         this.retweetedBlog = retweetedBlog;    
  47.     }    
  48.     
  49.     public void setText(String text) {    
  50.         this.text = text;    
  51.     }    
  52.         
  53.     public String getInReplyUserScreenName(){    
  54.         if (retweetedBlog!=null && retweetedBlog.getUser()!=null)    
  55.             return retweetedBlog.getUser().getScreenName();    
  56.         else    
  57.             return "";          
  58.     }    
  59.         
  60.     public String getInReplyBlogText(){    
  61.         if (retweetedBlog!=null)    
  62.             return retweetedBlog.getText();    
  63.         else    
  64.             return "";      
  65.     }    
  66.         
  67.     public void setPic(String smallPic){    
  68.         this.smallPic=smallPic;    
  69.     }    
  70.     
  71.     public void setUser(User user) {    
  72.         this.user = user;    
  73.     }    
  74.     
  75.     public int compareTo(Blog another) {    
  76.         int ret=0;    
  77.     
  78.         if (this.createAt.before(another.createAt)){    
  79.             ret=-1;    
  80.         }    
  81.         else if (this.createAt.after(another.createAt)){    
  82.             ret=1;    
  83.         }    
  84.         else{    
  85.             ret=0;      
  86.         }    
  87.     
  88.         return ret;    
  89.     }    
  90.     
  91.     public void setSource(String source) {    
  92.         this.source = source;    
  93.     }    
  94.     
  95.     public String getSource() {    
  96.         return source;    
  97.     }    
  98.     
  99.     public void setSite(Site site) {    
  100.         this.site = site;    
  101.     }    
  102.     
  103.     public Site getSite() {    
  104.         return site;    
  105.     }    
  106.     
  107. }   

 

 

  1. view plaincopy to clipboardprint?  
  2. package com.wenbin.test.site;    
  3.     
  4. import java.util.HashMap;    
  5. import java.util.Iterator;    
  6. import java.util.Map;    
  7. import java.util.Set;    
  8. import java.util.TreeSet;    
  9.     
  10.     
  11. public abstract class Site{    
  12.     
  13.     protected Set blogs=new TreeSet();    
  14.     protected String name;    
  15.     protected Map faceMap=new HashMap();    
  16.     
  17.     public Site() {    
  18.         onConstruct();    
  19.     }    
  20.     
  21.     protected abstract void onConstruct();    
  22.         
  23.     public Map getFaceMap() {    
  24.         return faceMap;    
  25.     }    
  26.         
  27.     public Set getBlogs(){    
  28.         return blogs;    
  29.     }    
  30.         
  31.     public long getBlogsCount(){    
  32.         return blogs.size();    
  33.     }    
  34.         
  35.     public void addBlog(Blog blog){    
  36.         blogs.add(blog);    
  37.     }    
  38.         
  39.     public void removeBlog(Blog blog){    
  40.         blogs.remove(blog);    
  41.     }    
  42.         
  43.     public Iterator getBlogsIterator(){    
  44.         return blogs.iterator();    
  45.     }    
  46.         
  47.     public void clearBlogs(){    
  48.         blogs.clear();    
  49.     }    
  50.     
  51.     public String getName(){    
  52.         return name;    
  53.     }    
  54. }   

 

 

  1. view plaincopy to clipboardprint?  
  2. package com.wenbin.test.site;    
  3.     
  4. public class SinaSite extends Site {    
  5.     
  6.     protected void onConstruct(){    
  7.         name="新浪微博";    
  8.         initFaceMap();    
  9.     }    
  10.     
  11.     private void initFaceMap(){    
  12.         faceMap.put("[呵呵]", "hehe");    
  13.         faceMap.put("[嘻嘻]", "xixi");    
  14.         faceMap.put("[哈哈]", "haha");    
  15.         faceMap.put("[爱你]", "aini");    
  16.         faceMap.put("[晕]", "yun");    
  17.         faceMap.put("[泪]", "lei");    
  18.     }    
  19. }   

 

先熟悉一下这些代码,下次就利用这些数据来制作基本的列表框。

【编辑推荐】

  1. 详解Android首选项框架ListPreference
  2. 谷歌最新平板系统Android 3.1细节详解
  3. 深入浅出 详解Android Surface系统
  4. 在Windows系统上安装与使用Android NDK r5
  5. Android开发:自定义GridView/ListView数据源

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...