`
wangfeiaini
  • 浏览: 54824 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

android ExpandableListView伸缩列表

阅读更多

这两天做东西要用到伸缩菜单,倒腾了两天 终于出来了,分享一下:

1.布局文件shop_info_layout.xml:

<ExpandableListView android:id="@+id/shop_tests"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:scrollbars="none"
           ></ExpandableListView>
xml中声明一个ExpandableListView 

 2.ExpandableListView 一级列表布局shop_product_item_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:gravity="center"
    >
    
	<TextView android:id="@+id/shop_product_name"
	    style="@style/TextStyle3"
	    android:gravity="center"
	    android:textColor="#000"
	    android:layout_marginLeft="5dp"
	    />
    
    <TextView android:id="@+id/shop_yuan"
        style="@style/TextStyle3"
        android:layout_alignParentRight="true"
        android:textColor="#000"
        android:layout_marginRight="5dp"
        android:layout_alignBaseline="@+id/shop_product_name"
        android:text="元"/>
    
    <TextView android:id="@+id/shop_productprice"
        style="@style/TextStyle3"
         android:textColor="#E96C14"
         android:layout_alignBaseline="@+id/shop_product_name"
         android:layout_toLeftOf="@+id/shop_yuan"
        />
    
    
</RelativeLayout>

 3.每个一级item下的二级信息布局shop_product_attr_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/shop_attrlist"
    android:orientation="horizontal"
    >
    
    <TextView android:id="@+id/shop_product_attrone"
        style="@style/TextStyle3"
        android:textColor="#000"
        android:textSize="14sp"
        android:layout_marginLeft="5dp"
        />
    
	<TextView android:id="@+id/shop_product_attrtwo"
	    android:textColor="#000"
	    style="@style/TextStyle3"
	    android:layout_marginLeft="15dp"
	     android:textSize="14sp"
	    />
	<TextView android:id="@+id/shop_product_attrprice"
	   	android:textColor="#FD6F0C"
	   	style="@style/TextStyle3"
	   	android:layout_marginLeft="20dp"
	    />
	<TextView android:id="@+id/shop_product_yuan"
	    style="@style/TextStyle3"
	    android:textColor="#000"
	     android:textSize="14sp"
	    android:text="元"/>
	<ImageView android:id="@+id/shop_product_attrcart"
	    android:layout_width="35dp"
	    android:layout_height="35dp"
	    android:background="@drawable/shop_purchase_cart"
	    android:layout_marginLeft="15dp"/>
</LinearLayout>

 布局文件中用到的 style="@style/TextStyle3":

<style name="TextStyle3">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">#fff</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

 4.定义ExpandableAdapter:

import java.util.List;
import java.util.Map;

import com.zline.app.avtivity.R;
import com.zline.app.entity.Product;
import com.zline.app.entity.ProductAttr;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public class ExpandableAdapter extends BaseExpandableListAdapter{
	
	private Context context;
	private List<Product> productList;
	private Map<Integer, List<ProductAttr>> attrMap;
	private LayoutInflater layoutInflater;
	
	public ExpandableAdapter(Context context,List<Product> productList,Map<Integer, List<ProductAttr>> attrMap){
		this.attrMap = attrMap;
		this.productList = productList;
		this.context = context;
	}

	@Override
	public Object getChild(int parentPosition, int childPosition) {
		return attrMap.get(productList.get(parentPosition).getProductId());
	}

	@Override
	public long getChildId(int parentPosition, int childPosition) {
		return childPosition;
	}

	@Override
	public View getChildView(int parentPosition, int childPosition, boolean isLastChild, View convertView,
			ViewGroup parent) {
		Holder holder;
		if(convertView==null){
			layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			LinearLayout layout = (LinearLayout) layoutInflater.from(context).inflate(R.layout.shop_product_attr_layout, null);
			convertView = layout;
			holder = new Holder();
			holder.attrOne = (TextView) convertView.findViewById(R.id.shop_product_attrone);
			holder.attrOne.setText(attrMap.get(productList.get(parentPosition).getProductId()).get(childPosition).getDictOne());
			holder.attrTwo = (TextView) convertView.findViewById(R.id.shop_product_attrtwo);
			holder.attrTwo.setText(attrMap.get(productList.get(parentPosition).getProductId()).get(childPosition).getDictTwo());
			holder.price = (TextView) convertView.findViewById(R.id.shop_product_attrprice);
			holder.price.setText(attrMap.get(productList.get(parentPosition).getProductId()).get(childPosition).getPrice()+"");
			convertView.setTag(holder);
		}else{
			holder = (Holder) convertView.getTag();
		}
		return convertView;
	}

	@Override
	public int getChildrenCount(int parentPosition) {
		return attrMap.get(productList.get(parentPosition).getProductId()).size();
	}

	@Override
	public Object getGroup(int parentPosition) {
		return productList.get(parentPosition);
	}

	@Override
	public int getGroupCount() {
		return productList.size();
	}

	@Override
	public long getGroupId(int parentPosition) {
		return parentPosition;
	}

	@Override
	public View getGroupView(int parentPosition, boolean isExpanded, View convertView, ViewGroup parent) {
		layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		RelativeLayout relativeLayout = (RelativeLayout) layoutInflater.inflate(R.layout.shop_product_item_layout, null);
		TextView productName = (TextView) relativeLayout.findViewById(R.id.shop_product_name);
		productName.setText(productList.get(parentPosition).getProductName());
		TextView priceRange = (TextView) relativeLayout.findViewById(R.id.shop_productprice);
		priceRange.setText(productList.get(parentPosition).getPriceRange());
		return relativeLayout;
	}

	@Override
	public boolean hasStableIds() {
		return true;
	}

	@Override
	public boolean isChildSelectable(int arg0, int arg1) {
		return true;
	}

	public boolean isEmpty() {
		return false;
	}

	public void onGroupExpanded(int groupPosition) {
		int a = getChildrenCount(groupPosition);
		if (a == 0) {
			Toast.makeText(context, "该组下没有数据!", Toast.LENGTH_LONG).show();
		}
	}

	public void onGroupCollapsed(int groupPosition) {
		Log.i("GFEDCBA", "我被折叠了!");
	} 
	
	static class Holder{
		TextView attrOne;
		TextView attrTwo;
		TextView price;
	}

 5.activity:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.zline.app.entity.Product;
import com.zline.app.entity.ProductAttr;
import com.zline.app.myclass.shop.ExpandableAdapter;
import com.zline.app.myclass.shop.GalleryAdapter;

import android.os.Bundle;
import android.view.Window;
import android.widget.ExpandableListView;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;

@SuppressWarnings("deprecation")
public class ShopInfoActivity extends Activity {

	
	
	List<Product> products;
	Map<Integer, List<ProductAttr>> productAttrs;
	ExpandableListView expandableListView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.shop_info_layout);
        createProduct();
        createAttr();
        initView();
    }


    
    //初始化各个组件
   private void initView(){
	 
	   expandableListView = (ExpandableListView) findViewById(R.id.shop_tests);
	   ExpandableAdapter expandableAdapter = new ExpandableAdapter(this, products, productAttrs);
	   expandableListView.setAdapter(expandableAdapter);
   } 
   
   
   private List<Map<String, Object>> createAttrs(){
	   attrList = new ArrayList<Map<String,Object>>();
	   for(int i=0;i<2;i++){
		   Map<String, Object> m = new HashMap<String, Object>();
		   m.put(ConstantDef.PRODUTC_ATTR_ONE, "规格:半只");
		   m.put(ConstantDef.PRODUCT_ATTR_TWO, "口味:纯香");
		   m.put(ConstantDef.PRODUCT_ATTR_PRICE, 38.0);
		   attrList.add(m);
	   }
	   return attrList;
   }*/
   
   private List<Product> createProduct(){
	   products = new ArrayList<Product>();
	   for(int i=0;i<4;i++){
		   Product p = new Product();
		   p.setPriceRange("29-32");
		   p.setProductName("港式叉烧饭");
		   p.setProductId(i+1);
		   products.add(p);
	   }
	   return products;
   }
   
   private Map<Integer, List<ProductAttr>> createAttr(){
	   productAttrs = new HashMap<Integer, List<ProductAttr>>();
	 //  List<ProductAttr> 
	   for(Product p:products){
		   List<ProductAttr> attrs = productAttrs.get(p.getProductId());
		   if(attrs == null){
			   attrs = new ArrayList<ProductAttr>();
			   ProductAttr attr = new ProductAttr();
			   attr.setDictOne("规格:半只");
			   attr.setDictTwo("风味:纯香");
			   attr.setPrice(28);
			   attr.setProductId(p.getProductId());
			   attr.setAttrId(products.indexOf(p));
			   attrs.add(attr);
			   attrs.add(attr);
			   productAttrs.put(p.getProductId(), attrs);
		   }else{
			   ProductAttr attr = new ProductAttr();
			   attr.setDictOne("规格:半只");
			   attr.setDictTwo("风味:纯香");
			   attr.setPrice(28);
			   attr.setProductId(p.getProductId());
			   attr.setAttrId(products.indexOf(p));
			   attrs.add(attr);
			   attrs.add(attr);
			   productAttrs.put(p.getProductId(), attrs);
		   }
	   }
	   return productAttrs;
   }

 效果看附件。

参考文献:http://blog.csdn.net/luck_apple/article/details/6742018

http://wenku.baidu.com/view/f6ec17265901020207409c36.html

http://blog.csdn.net/jianghuiquan/article/details/8350550

  • 大小: 26.8 KB
0
1
分享到:
评论

相关推荐

    三级伸缩列表expandableListView

    总之,三级伸缩列表在Android开发中是一种强大的工具,通过理解其工作原理,定制适配器,优化性能,可以创建出功能强大且用户体验良好的层级数据展示界面。这个压缩包文件"ExpandableListView"可能包含了实现三级...

    自定义横向Expandablelistview

    在Android开发中,ExpandableListView是一种常见的视图组件,它允许用户展示可展开和折叠的分组数据。然而,标准的ExpandableListView是垂直布局的,对于需要横向展示的场景,我们可能需要对其进行定制。标题...

    android-listview列表伸缩自定义组件

    这就是所谓的"android-listview列表伸缩自定义组件"。这个特性使得用户可以方便地查看和操作列表中的每个条目,并提供了一个优雅的方式来显示更多与列表项相关的详细信息。 首先,我们来理解一下这个功能的核心概念...

    ExpandableListView+CheckBox多选功能

    在Android开发中,`ExpandableListView`是一种常用的...通过合理的设计和编程实践,我们可以创建出高效且用户体验良好的多选伸缩列表。在实际项目中,开发者应根据具体需求灵活运用这些技术,确保功能的稳定性和性能。

    二级Android可展开的列表(带展开动画的expandlistview)

    `ExpandableListView`是Android SDK提供的一个视图类,专门用于展示可折叠的列表数据。它扩展了ListView,增加了群组和子项的概念,每个群组下可以包含多个子项。在这个特定的案例中,"二级Android可展开的列表"意味...

    expandablelistview展开折叠(收缩)动画效果

    http://download.csdn.net/detail/chen_dl/8383145#comment这个是我上传的在github下载的库,库里没有告诉大家该怎么用,所以我上传了自己实现的demo.跟大家一起分享我的成果,这种折叠和展开的动画效果在国内的网站...

    listView伸缩实现.rar

    总的来说,"listView伸缩实现"项目提供了一个实用的ExpandableListView应用示例,可以帮助开发者理解并掌握如何在Android中实现列表的伸缩和二级展开功能。通过学习这个项目的源码,我们可以深入理解...

    具有伸缩功能的ListView

    伸缩功能是通过使用ExpandableListView类实现的,它是ListView的一个子类,提供了扩展和折叠列表项的功能。每个可折叠的列表项(Group)可以包含一个或多个子项(Child)。当用户点击Group时,其对应的子项会以展开...

    基于Android Studio制作的仿QQ界面

    列表的伸缩扩展功能可能涉及到ExpandableListView或者自定义扩展效果,这种交互设计增加了用户体验的丰富性。 动态界面的实现可能包含了GridView或HorizontalScrollView等组件,用于展示多列或横向滑动的内容。仿58...

    可以伸缩的ListView

    3. **ExpandableListView**:Android SDK中已经提供了一个名为ExpandableListView的控件,它支持子项的展开和折叠。不过,如果要实现"可以伸缩的ListView",我们可能需要自定义它的行为,或者结合普通的ListView和...

    Android_仿QQ分组列表框源码

    在Android应用开发中,创建一个类似QQ的分组列表框是一项常见的需求,它涉及到用户界面设计、数据结构处理以及自定义视图等技术。本文将深入解析如何利用Android_仿QQ分组列表框源码来实现这样的功能。 首先,我们...

    手风琴列表示例代码

    手风琴列表(Accordion List)是一种用户界面设计模式,常用于呈现多级列表数据,它允许用户逐级展开和收起列表项,以显示或隐藏子级内容,类似音乐乐器手风琴的伸缩动作,因此得名。在Android平台上,实现手风琴...

    ListView+头部可伸缩+item可分组

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。`ListView+头部可伸缩+item可分组`的主题涉及到对ListView的高级定制,以实现更丰富的交互效果和数据组织方式。这里我们将深入探讨如何实现...

    头部固定不动的listview

    标题“头部固定不动的listview”所指的就是这样一个功能:在`ListView`上方有一个可以伸缩的头部,而`ExpandableListView`的头部是固定的,不会随着列表的滚动而移动。 `ExpandableListView`是`ListView`的一个扩展...

    Android项目源码完整的CJJ漫画app项目

    程序的主框架是SlidingMenu+fragment,有四个子Fragment,首页分类点击有旋转木马的动画效果,PullScrollView,仿照的新浪微博Android客户端个人中心的ScrollView,下拉的时候有两种效果,一种是背景伸缩回弹效果,...

    安卓源码包 Android GPS 开发 地图&导航&定位&指南等设计代码合集 (45个).zip

    一个ExpandableListView的例子,实现多级菜单分类展示.rar 上传百度地图的基本定位操作应用.rar 两个GPS导航定位源码.rar 以圆心散开的半圆菜单.zip 仿 网易新闻客户端 滑动导航.zip 仿google play侧滑菜单.zip 仿...

    PinnedHeaderExpandableListView

    《PinnedHeaderExpandableListView详解:打造固定头部与可伸缩功能的列表视图》 在Android开发中,我们常常需要处理数据展示的问题,而ExpandableListView作为一个强大的组件,能够帮助我们实现分组数据的展示,...

    Android高级应用源码-自己做的手风琴效果 没有用折叠list 每个选项中 显示的是不同的list.zip

    本项目"Android高级应用源码-自己做的手风琴效果 没有用折叠list 每个选项中 显示的是不同的list.zip"就是一种自制的手风琴效果,没有依赖折叠List(android.widget.ExpandableListView)这一常见的实现方式。...

    可展开可收缩的列表,可自定义布局

    在Android开发中,`ExpandListView`是一个非常实用的控件,它允许用户展开或收缩列表项,以此来显示或隐藏更多的子项内容。这个控件为用户提供了更丰富的交互体验,尤其是在展示层次结构数据时。标题"可展开可收缩的...

Global site tag (gtag.js) - Google Analytics