Android PinnedSectionListView 收缩

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

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

void createPinnedShadow(int position) {}》》

if (layoutParams == null) {
		   //layoutParams = (LayoutParams) generateDefaultLayoutParams();
			layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
		    pinnedView.setLayoutParams(layoutParams);
		}

效果图:

具体代码AdapterListView:

package pinneactivity.example.ui;

import java.util.ArrayList;

import pinneactivity.example.ui.PinnedSectionListView.PinnedSectionListAdapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/*
 *
 * This is company of adapter
 *
 * @author YangWenlong
 */
public class AdapterListView extends BaseAdapter implements PinnedSectionListAdapter{
	private ArrayList<Bean> list;
	private Context context;
	public ArrayList<Bean> getList() {
		return list;
	}
	public void setList(ArrayList<Bean> list) {
		if(list!=null){
			this.list = list;
		}else{
			list=new ArrayList<Bean>();
		}
	}
	public AdapterListView(Context context,ArrayList<Bean> list){
		this.setList(list);
		this.context=context;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Bean getItem(int position) {
		// TODO Auto-generated method stub
		return list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View converView, ViewGroup viewGrop) {
		// TODO Auto-generated method stub
		ViewHolder vh=null;
		if(converView==null){
			vh=new ViewHolder();
			converView=LayoutInflater.from(context).inflate(R.layout.item, null);
			vh.company_item=(TextView)converView.findViewById(R.id.title);
			vh.image=(ImageView)converView.findViewById(R.id.imageView1);
			converView.setTag(vh);
		}else{
			vh=(ViewHolder) converView.getTag();
		}
		Bean bean=getItem(position);
		vh.company_item.setText(bean.text);
		if (bean.type == Bean.SECTION) {
			vh.company_item.setBackgroundResource(R.drawable.bao_headview_bg);
			vh.image.setVisibility(View.GONE);

		}else{
			vh.company_item.setBackgroundResource(R.drawable.details_layout_bg);
			vh.image.setVisibility(View.VISIBLE);
		}
		return converView;
	}
	@Override
	public boolean isItemViewTypePinned(int viewType) {
		// TODO Auto-generated method stub
		return viewType == Bean.SECTION;//0是标题,1是内容
	}

	@Override
	public int getViewTypeCount() {
		return 2;//2种view的类型 baseAdapter中得方法
	}
	@Override
	public int getItemViewType(int position) {
		return ((Bean)getItem(position)).type;
	}
	public void refresh(ArrayList<Bean> arr){
        setList(arr);
        notifyDataSetChanged();
    }

}

HeadView:

package pinneactivity.example.ui;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.Toast;

/*
 * Fail view
 *
 * @author YangWenlong
 */
public class HeadView implements OnClickListener{
	private View view = null;
	private Activity activity;
	private LinearLayout newFriends;
	private LinearLayout grop;
	private LinearLayout tag;
	private LinearLayout publicNumber;
	private static HeadView headView = null;

	public static HeadView getInstance(Activity activity) {
			headView = new HeadView(activity);
		return headView;
	}

	public HeadView(Activity activity) {
		view=activity.getLayoutInflater().inflate(R.layout.item_head, null);
		this.activity=activity;
	}

	public HeadView initialization(){
        newFriends=(LinearLayout)view.findViewById(R.id.layout_new);
        grop=(LinearLayout)view.findViewById(R.id.layout_group);
        tag=(LinearLayout)view.findViewById(R.id.layout_tag);
        publicNumber=(LinearLayout)view.findViewById(R.id.layout_public);

        newFriends.setOnClickListener(this);
        grop.setOnClickListener(this);
        tag.setOnClickListener(this);
        publicNumber.setOnClickListener(this);

		return headView;
	}

	public View getView(){
		return view;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if(v==newFriends){
			Toast.makeText(activity, "新朋友", Toast.LENGTH_SHORT).show();
		}else if(v==grop){
			Toast.makeText(activity, "群聊", Toast.LENGTH_SHORT).show();
		}else if(v==tag){
			Toast.makeText(activity, "标签", Toast.LENGTH_SHORT).show();
		}else if(v==publicNumber){
			Toast.makeText(activity, "公众号", Toast.LENGTH_SHORT).show();
		}
	}
}

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

时间: 2024-10-13 02:34:07

Android PinnedSectionListView 收缩的相关文章

类似通讯录分组的Android PinnedSectionListView,且分组标签悬停滑入滑出

 <类似通讯录分组的Android PinnedSectionListView,且分组标签悬停滑入滑出> 常用的联系人.通讯录,会按照联系人的姓氏从A,B,C,,,X,Y,Z,这样归类排列下去,方便用户快速查找和定位.PinnedSectionListView是一个第三方的开源框架,在github上的链接地址是:https://github.com/beworker/pinned-section-listview .Android PinnedSectionListView不仅是一个实现上

android列表收缩与展开仿QQ好友列表(非常详细,附源码)

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

14.Android之Layout布局学习

Android布局主要有5种,接下来学习总结下. 1) 最常见的线性布局 LinearLayout 线性布局是Android布局中最简单的布局,也是最常用,最实用的布局. android:orientation线形布局的对齐方式 : vertical(垂直) 和 horizontal(水平) LayoutParams中的特殊参数: layout_weight 权值 layout_gravity 相对于父元素的重力值(默认top|left): (top|bottom|left|right|cent

Android应用的界面编程(二)

第一组UI组件--以viewGroup为基类的布局管理器 Android的布局管理器本身就是一个UI组件,继承了View类,是ViewGroup的一个子类. 从图可以看出来,所有布局都可以作为容器类使用,因此可以调用多个重载的方法addView()向布局容器添加组件. 1.线性布局 线性布局即LinearLayout,能将容器的组件一个挨着一个排列起来,可以控制横向排列还是纵向排列.当然,线性布局不会换行,当组件一个挨着一个排列到头之后,剩下的组件不会被显示出来. 1.1LinearLayout

Android 之 布局训练

1.线性布局 LinearLayout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="

Android 构建UI

在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用JAVA代码 使用XML完全定义界面 结合使用两者,在XML中定义,在JAVA中引用和修改 Android SDK中关于UI的核心类: Android.view.View和android.view.ViewGroup android中的常见UI控件均会扩展View和ViewGroup其中有一部分是专

安卓布局TableLayout初学之拉伸按钮收缩按钮

代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableLayout android:lay

Android开发之五种布局

一.LinearLayout线性布局 1.常见属性 android:orientation="horizontal":制定线性布局的排列方式 水平 horizontal 垂直 vertical gravity 控制当前控件内容显示区域 layout_gravity 当前控件在父元素的位置 Layout_weight 额外空间分配(权重) android:visibility="invisible" 控制布局是否显示 显示 visible 不显示,但占空间 invis

Android总结二五大布局

一.五大布局 1.LinearLayout线性布局 2.RelativeLayout相对布局 3.AbsoluteLayout绝对布局 4.TableLayout表格布局 5.FrameLayout帧布局 二.LinearLayout线性布局 1.android:orientation="horizontal"  制定线性布局的排列方式:水平 horizontal ,垂直 vertical 2.gravity 控制当前控件内容显示区域 layout_gravity 当前控件在父元素的位