Android UI控件组合应用之一:建立数据模型

移动开发 Android
本文通过Android版本的新浪微博手机客户端为例,介绍了Android代码如何实现微博主体列表框,你能从中了解到Android在UI部分为应用程序开发人员提供了极大的便利和灵活性。

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<Blog>{    
  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<Blog> blogs=new TreeSet<Blog>();    
  14.     protected String name;    
  15.     protected Map<String,String> faceMap=new HashMap<String,String>();    
  16.     
  17.     public Site() {    
  18.         onConstruct();    
  19.     }    
  20.     
  21.     protected abstract void onConstruct();    
  22.         
  23.     public Map<String, String> getFaceMap() {    
  24.         return faceMap;    
  25.     }    
  26.         
  27.     public Set<Blog> 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<Blog> 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数据源
责任编辑:佚名 来源: CSDN博客
相关推荐

2011-06-01 14:20:37

Android

2021-02-28 22:20:25

2011-02-28 13:19:50

SQL Server SQL死锁

2010-05-26 14:37:56

Cassandra数据

2021-01-27 05:34:33

Python对象模型

2012-03-05 10:54:03

NoSQL

2009-09-18 14:07:51

LINQ to SQL

2021-01-15 13:18:39

数据模型领域模型代码

2011-08-10 15:36:26

iPhone静态库控件

2011-04-11 15:53:40

C++

2017-06-27 10:08:29

数据仓库模型

2016-11-02 12:32:47

数据分析大数据模型

2010-08-11 09:29:25

FlexJava数据模型

2017-02-13 17:17:48

Android标题栏控件

2017-01-18 08:41:22

大数据画像建设

2022-04-01 16:04:33

Harmonytabs容器鸿蒙

2013-12-02 13:59:22

jQueryUI

2022-08-15 14:49:12

物联网数据模型存储

2021-07-14 10:09:05

架构模型数据

2024-05-13 11:25:08

概念模型逻辑模型物理模型
点赞
收藏

51CTO技术栈公众号