Android:ListView、SimpleAdapter、设置不同行布局、getViewTypeCount、getItemViewType

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public  class  MainActivity  extends  Activity
{
                
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
                    
         ListView listView = (ListView) findViewById(R.id.listView1);
                    
         ArrayList<HashMap<String, String>> data =  new  ArrayList<HashMap<String,String>>();
                    
         for  ( int  i =  0 ; i <  30 ; i++)
         {
             HashMap<String, String> object =  new  HashMap<String, String>();
             object.put( "title" , "title"  + i );
             object.put( "subtitle" , "subtitle"  + i );
             object.put( "time" , "time"  + i );
             data.add(object);
         }
                    
         String[] from =  new  String[]{ "title" , "subtitle" , "time" }; //作为hashmap的key使用
         int [] to =  new  int []{R.id.textView_title,R.id.textView_subtitle,R.id.textView_time};
         SimpleAdapter simpleAdapter =  new  SimpleAdapter( this , data, R.layout.relaout, from, to);
         listView.setAdapter(simpleAdapter);
     }
                
     @Override
     public  boolean  onCreateOptionsMenu(Menu menu)
     {
         getMenuInflater().inflate(R.menu.activity_main, menu);
         return  true ;
     }
                
}


注:SimpleAdapter支持的控件有限。


==================================================================

二、设置不同行布局

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
     class  WeiboListAdapter  extends  BaseAdapter
     {
         private  final  static  int  VIEW_TYPE1 =  0 ;
         private  final  static  int  VIEW_TYPE2 =  1 ;
         private  final  static  int  VIEW_TYPE_COUNT = VIEW_TYPE2 +  1 ;
         
         @Override
         public  View getView( int  position, View convertView, ViewGroup parent)
         {
             CommentViewHolder commentHolder =  null ;
             ViewHolder holder =  null ;
             
             int  type = getItemViewType(position);
             
             if  (convertView ==  null )
             {
                 if  (type == VIEW_TYPE1)
                 {
                     // 微博内容
                     convertView = getLayoutInflater().inflate(R.layout.weibo_item,  null );
                     holder =  new  ViewHolder();
                     holder.headerImg = (ImageView) convertView.findViewById(R.id.weibo_item_iv_headerImg);
                     holder.userName = (TextView) convertView.findViewById(R.id.weibo_item_tv_userName);
                     holder.commentNum = (TextView) convertView.findViewById(R.id.weibo_item_tv_commentNum);
                     holder.forwardTimes = (TextView) convertView.findViewById(R.id.weibo_item_tv_forwardTimes);
                     holder.content = (TextView) convertView.findViewById(R.id.weibo_item_tv_content);
                     holder.contentImg = (ImageView) convertView.findViewById(R.id.weibo_item_iv_contentImg);
                     holder.forwardContent = (TextView) convertView.findViewById(R.id.weibo_item_tv_forwardContent);
                     holder.forwardContentImg = (ImageView) convertView.findViewById(R.id.weibo_item_iv_forwardContentImg);
                     holder.from = (TextView) convertView.findViewById(R.id.weibo_item_tv_from);
                     holder.time = (TextView) convertView.findViewById(R.id.weibo_item_tv_time);
                     holder.retweetedLayout = convertView.findViewById(R.id.weibo_item_retweetedLayout);
                     convertView.setTag(holder);
                 }
                 else
                 {
                     // 评论列表
                     commentHolder =  new  CommentViewHolder();
                     convertView = getLayoutInflater().inflate(R.layout.weibocomment_item,  null );
                     commentHolder.headerImg = (ImageView) convertView.findViewById(R.id.weibocomment_item_iv_headerImg);
                     commentHolder.userName = (TextView) convertView.findViewById(R.id.weibocomment_item_tv_userName);
                     commentHolder.time = (TextView) convertView.findViewById(R.id.weibocomment_item_tv_time);
                     commentHolder.content = (TextView) convertView.findViewById(R.id.weibocomment_item_tv_content);
                     
                     convertView.setTag(commentHolder);
                 }
             }
             else
             {
                 if  (type == VIEW_TYPE1)
                 {
                     holder = (ViewHolder) convertView.getTag();
                 }
                 else
                 {
                     commentHolder = (CommentViewHolder) convertView.getTag();
                 }
             }
             
             WeiboJson weiboJson = mDataList.get(position);
             if  (type == VIEW_TYPE1)
             {
                 updataWeiboData(holder, weiboJson);
             }
             else
             {
                 updateCommentData(commentHolder, weiboJson);
             }
             
             return  convertView;
             
         }
         
         @Override
         public  int  getCount()
         {
             return  mDataList.size();
         }
         
         @Override
         public  int  getItemViewType( int  position)
         {
             if  (position ==  0 )
             {
                 return  VIEW_TYPE1;
             }
             else
             {
                 return  VIEW_TYPE2;
             }
         }
         
         @Override
         public  int  getViewTypeCount()
         {
             
             return  VIEW_TYPE_COUNT;
         }
         
         @Override
         public  Object getItem( int  position)
         {
             return  mDataList.get(position);
         }
         
         @Override
         public  long  getItemId( int  position)
         {
             return  position;
         }
         
     }




本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1202086,如需转载请自行联系原作者
目录
相关文章
|
11月前
|
数据库 Android开发
Android使用EditText+Listview实现搜索效果(使用room模糊查询)
本文介绍如何在Android中使用EditText与ListView实现搜索功能,并结合Room数据库完成模糊查询。主要内容包括:Room的模糊查询语句(使用`||`代替`+`号)、布局美化(如去除ListView分割线和EditText下划线)、EditText回车事件监听,以及查询逻辑代码示例。此外,还提供了相关扩展文章链接,帮助读者深入了解ListView优化、动态搜索及Room基础操作。
673 65
|
11月前
|
Android开发 开发者
Android设置View是否可用
在Android开发中,有时需要将布局设置为不可点击状态(失去焦点)。常见的解决方法是使用`setOnClickListener(null)`,但本文介绍一种更通用的方式:通过封装`setViewEnabled`方法实现。该方法可递归设置View及其子View的启用状态,支持传入目标View和布尔值(`true`为可用,`false`为禁用)。例如,调用`setViewEnabled(edittext, false)`即可禁用EditText。文章附有源码及示例动图,帮助开发者快速理解与应用。
245 1
|
7月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
231 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
7月前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
182 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
11月前
|
Android开发 开发者
Android中Dialog位置+样式的设置
本文介绍了在Android开发中如何设置Dialog的位置和样式。通过自定义`MyDialog`类,可以灵活调整Dialog的显示位置,例如将其固定在屏幕底部,并设置宽度匹配父布局。同时,文章还展示了如何模仿Android原生Dialog样式,通过定义`MyDialogStyle`去除标题栏、设置背景透明度、添加阴影效果以及配置点击外部关闭等功能,从而实现更加美观和符合需求的Dialog效果。代码示例详细,便于开发者快速上手实现。
603 2
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
Android开发
Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果
本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。
1277 4
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
1074 0
|
XML 前端开发 Android开发
android 前端常用布局文件升级总结(二)
android 前端常用布局文件升级总结(二)
168 0
|
XML 前端开发 Android开发
android 前端常用布局文件升级总结(一)
android 前端常用布局文件升级总结(一)
184 0