Android PinnedSectionListView 收缩

转自:http://blog.csdn.net/anddroid_lanyan/article/details/41895631

网上开源项目:https://github.com/beworker/pinned-section-listview,该项目用的是ArrayAdapter()..不太适合我,稍作修改,仿的微信界面

PinnedSectionListView修改了一行代码,不然会报错,代码如下

void createPinnedShadow(int position) {}》》

[java] view
plain
copy

  1. if (layoutParams == null) {  
  2.            //layoutParams = (LayoutParams) generateDefaultLayoutParams();  
  3.             layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);  
  4.             pinnedView.setLayoutParams(layoutParams);  
  5.         }  

效果图:

具体代码AdapterListView:

[java] view
plain
copy

  1. package pinneactivity.example.ui;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import pinneactivity.example.ui.PinnedSectionListView.PinnedSectionListAdapter;  
  6. import android.content.Context;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.ImageView;  
  12. import android.widget.TextView;  
  13. /* 
  14.  *  
  15.  * This is company of adapter 
  16.  *  
  17.  * @author YangWenlong 
  18.  */  
  19. public class AdapterListView extends BaseAdapter implements PinnedSectionListAdapter{  
  20.     private ArrayList<Bean> list;  
  21.     private Context context;  
  22.     public ArrayList<Bean> getList() {  
  23.         return list;  
  24.     }  
  25.     public void setList(ArrayList<Bean> list) {  
  26.         if(list!=null){  
  27.             this.list = list;  
  28.         }else{  
  29.             list=new ArrayList<Bean>();  
  30.         }  
  31.     }  
  32.     public AdapterListView(Context context,ArrayList<Bean> list){  
  33.         this.setList(list);  
  34.         this.context=context;  
  35.     }  
  36.     @Override  
  37.     public int getCount() {  
  38.         // TODO Auto-generated method stub  
  39.         return list.size();  
  40.     }  
  41.   
  42.     @Override  
  43.     public Bean getItem(int position) {  
  44.         // TODO Auto-generated method stub  
  45.         return list.get(position);  
  46.     }  
  47.   
  48.     @Override  
  49.     public long getItemId(int position) {  
  50.         // TODO Auto-generated method stub  
  51.         return position;  
  52.     }  
  53.   
  54.     @Override  
  55.     public View getView(int position, View converView, ViewGroup viewGrop) {  
  56.         // TODO Auto-generated method stub  
  57.         ViewHolder vh=null;  
  58.         if(converView==null){  
  59.             vh=new ViewHolder();  
  60.             converView=LayoutInflater.from(context).inflate(R.layout.item, null);  
  61.             vh.company_item=(TextView)converView.findViewById(R.id.title);  
  62.             vh.image=(ImageView)converView.findViewById(R.id.imageView1);  
  63.             converView.setTag(vh);  
  64.         }else{  
  65.             vh=(ViewHolder) converView.getTag();  
  66.         }  
  67.         Bean bean=getItem(position);  
  68.         vh.company_item.setText(bean.text);  
  69.         if (bean.type == Bean.SECTION) {  
  70.             vh.company_item.setBackgroundResource(R.drawable.bao_headview_bg);  
  71.             vh.image.setVisibility(View.GONE);  
  72.               
  73.         }else{  
  74.             vh.company_item.setBackgroundResource(R.drawable.details_layout_bg);  
  75.             vh.image.setVisibility(View.VISIBLE);  
  76.         }  
  77.         return converView;  
  78.     }  
  79.     @Override  
  80.     public boolean isItemViewTypePinned(int viewType) {  
  81.         // TODO Auto-generated method stub  
  82.         return viewType == Bean.SECTION;//0是标题,1是内容  
  83.     }  
  84.   
  85.     @Override  
  86.     public int getViewTypeCount() {  
  87.         return 2;//2种view的类型 baseAdapter中得方法  
  88.     }  
  89.     @Override  
  90.     public int getItemViewType(int position) {  
  91.         return ((Bean)getItem(position)).type;  
  92.     }  
  93.     public void refresh(ArrayList<Bean> arr){  
  94.         setList(arr);  
  95.         notifyDataSetChanged();  
  96.     }  
  97.   
  98. }  

HeadView:

[java] view
plain
copy

  1. package pinneactivity.example.ui;  
  2.   
  3. import android.app.Activity;  
  4. import android.view.View;  
  5. import android.view.View.OnClickListener;  
  6. import android.widget.LinearLayout;  
  7. import android.widget.Toast;  
  8.   
  9. /* 
  10.  * Fail view 
  11.  *  
  12.  * @author YangWenlong 
  13.  */  
  14. public class HeadView implements OnClickListener{  
  15.     private View view = null;  
  16.     private Activity activity;  
  17.     private LinearLayout newFriends;  
  18.     private LinearLayout grop;  
  19.     private LinearLayout tag;  
  20.     private LinearLayout publicNumber;  
  21.     private static HeadView headView = null;  
  22.   
  23.     public static HeadView getInstance(Activity activity) {  
  24.             headView = new HeadView(activity);  
  25.         return headView;  
  26.     }  
  27.   
  28.     public HeadView(Activity activity) {  
  29.         view=activity.getLayoutInflater().inflate(R.layout.item_head, null);  
  30.         this.activity=activity;  
  31.     }  
  32.   
  33.     public HeadView initialization(){  
  34.         newFriends=(LinearLayout)view.findViewById(R.id.layout_new);  
  35.         grop=(LinearLayout)view.findViewById(R.id.layout_group);  
  36.         tag=(LinearLayout)view.findViewById(R.id.layout_tag);  
  37.         publicNumber=(LinearLayout)view.findViewById(R.id.layout_public);  
  38.   
  39.         newFriends.setOnClickListener(this);  
  40.         grop.setOnClickListener(this);  
  41.         tag.setOnClickListener(this);  
  42.         publicNumber.setOnClickListener(this);  
  43.   
  44.   
  45.         return headView;  
  46.     }  
  47.   
  48.     public View getView(){  
  49.         return view;  
  50.     }  
  51.   
  52.     @Override  
  53.     public void onClick(View v) {  
  54.         // TODO Auto-generated method stub  
  55.         if(v==newFriends){  
  56.             Toast.makeText(activity, "新朋友", Toast.LENGTH_SHORT).show();  
  57.         }else if(v==grop){  
  58.             Toast.makeText(activity, "群聊", Toast.LENGTH_SHORT).show();  
  59.         }else if(v==tag){  
  60.             Toast.makeText(activity, "标签", Toast.LENGTH_SHORT).show();  
  61.         }else if(v==publicNumber){  
  62.             Toast.makeText(activity, "公众号", Toast.LENGTH_SHORT).show();  
  63.         }  
  64.     }  
  65. }  

项目下载:http://download.csdn.net/detail/anddroid_lanyan/8252891

时间: 2024-12-02 07:41:26

Android PinnedSectionListView 收缩的相关文章

Android零基础入门第29节:善用TableLayout表格布局,事半功倍

原文:Android零基础入门第29节:善用TableLayout表格布局,事半功倍 前面学习了线性布局和相对布局,线性布局虽然方便,但如果遇到控件需要排列整齐的情况就很难达到要求,用相对布局又比较麻烦,为此Android系统中提供了表格布局.     一.认识TableLayout 表格布局就是让控件以表格的形式来排列控件,只要将控件放在单元格中,控件就可以整齐地排列,使用TableLayout标签. TableLayout继承了 LinearLayout,因此它的本质依然是线性布局管理器.每

Android中文API(116)——TableLayout

前言 本章内容是android.widget.TableLayout,版本为Android 3.0 r1,翻译来自"cnmahj",欢迎大家访问他的博客:http://android.toolib.net/blog/,再次感谢"cnmahj"!欢迎你一起参与Android的中文翻译,联系我over140@gmail.com.    声明 欢迎转载,但请保留文章原始出处:)    博客园:http://www.cnblogs.com/ Android中文翻译组:htt

JavaScript实现的伸展收缩型菜单代码_javascript技巧

本文实例讲述了JavaScript实现的伸展收缩型菜单代码.分享给大家供大家参考.具体如下: 这是一款真正的JavaScript伸展收缩型菜单,鼠标放上看一看,是不是很酷?鼠标划出菜单项的时候,背景会伸长.菜单没有加链接,想用的自己加,再美化一下,绝对够个性吧. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-zkss-menu-codes/ 具体代码如下: <html> <head> <title>真正的Java

AndroidUI设计之 布局管理器 - 详细解析布局实现

写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器都有一个LayoutParams内部类, android:... 是父容器用来控制子组件的属性. 如android:layout_gravity 是控制组件本身的对齐方式, android:gravity是控制本容器子组件的对齐方式; . 作者 :万境绝尘  转载请注明出处 : http://blo

Android仿QQ好友列表实现列表收缩与展开_Android

ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项. 好友QQ列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到android的ExpandableListView,今天研究了一下这个的用法,也参考了很多资料动手写了一个小demo,实现了基本的功能,下面直接上效果图以及源代码

Android开源项目第一篇——个性化控件(View)篇

本文为那些不错的Android开源项目第一篇--个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialog.Toast.EditText.TableView.Activity Animation等等. 本文中你可以找到那些精美App中各种有特性的View,如Gmail的左滑出菜单.Google plus的卡片式L

android git上开源的项目收藏

本文为那些不错的Android开源项目第一篇--个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialog.Toast.EditText.TableView.Activity Animation等等.   最新内容请访问AndroidOpenProject@Github,欢迎Star和Fork.   Androi

GitHub上史上最全的Android开源项目分类汇总

今天在看博客的时候,无意中发现了 @Trinea在GitHub上的一个项目 Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫的界面特效设计.个性化控件.工具库.优秀的Android开源项目.开发测试工具.优秀个人和团体等.可以这样说,每一位Andorid开发人员都能从中找到一个或多个适用自己项目的解决方案,消化吸收并加以利用,可以为自己的APP增色不少.文章最后还列出了部分国外著名Android开发者的信息,包括GitHub

Android 开源控件系列_1

第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style等等..其他 一.ListView android-pulltorefresh一个强大的拉动刷新开源项目,支持各种控件下拉刷新