`

ExpandableListView 中嵌套 gridview

阅读更多

ExpandableListView 中嵌套 gridview ,都是viewgroup 这样嵌套的话 gridview只会显示一行

原因: 就是有滚动条的控件里放有滚动条的控件就会出现只显示一两行的问题,,解决的办法就是, 把子控件设置为没有滚动条. 具体就是自定义控件.
把GridView自定义一下,代码如下,然后用这个自定义的控件就行了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <com.example.mygridview.MyGridview
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="3"
        android:columnWidth="80dp"
        android:stretchMode="columnWidth"
        android:background="@drawable/background">
    </com.example.mygridview.MyGridview> 

</LinearLayout>

/////////////////////////////////////////////////////////////////////////类这样写就是了,这也算自定义组件

package com.example.mygridview;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
public class MyGridView extends GridView
{
public MyGridView(android.content.Context context,
android.util.AttributeSet attrs)
{
super(context, attrs);
}

/**
* 设置不滚动
*/
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);

}

}

 

//要想该界面除了显示ExpandableListView 还显示别的view的话


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>

<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="55dp"
android:text=""
android:gravity="center"
android:background="@drawable/backgroud003"
/>

<ExpandableListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</ExpandableListView>

</LinearLayout>

 

//activity如何实现

package com.example.mxhome;

import java.util.ArrayList;

import com.example.adapter.GridViewHolder;
import com.example.adapter.MyAdapter;
import com.example.adapter.MyOnItemClickListener;
import com.example.application.APP;
import com.example.application.MyApplication;

import android.os.Bundle;
import android.app.Activity;
import android.app.ExpandableListActivity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.BaseExpandableListAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class AppCategoryActivity extends ExpandableListActivity
{

private ArrayList<String> arrayList;
private ArrayList<APP> applist;
private ArrayList<APP> mxhomelist;
private ArrayList<APP> basiclist;
private ArrayList<APP> applicationlist;
private ListAdapter madapter=new BaseAdapter()
{

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = getLayoutInflater();
LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.item, null);
ImageView imageView = (ImageView)linearLayout.findViewById(R.id.imageView1);
TextView textView = (TextView)linearLayout.findViewById(R.id.textView1);
// imageView.setLayoutParams(new AbsListView.LayoutParams(96,96));
APP app = applist.get(position);
imageView.setImageDrawable(app.getIcon());
textView.setText(app.getLabel());
return linearLayout;
}

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

@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return null;
}

@Override
public int getCount()
{
return applist.size();
}
};

private BaseExpandableListAdapter adapter=new BaseExpandableListAdapter()
{

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}

@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
/**
* @return自定义的textview
*/
public TextView getGenericView() {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, 64);

TextView textView = new TextView(AppCategoryActivity.this);
textView.setLayoutParams(lp);
// Center the text vertically
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
// Set the text starting position
textView.setPadding(36, 0, 0, 0);
textView.setBackgroundResource(R.color.groud);
return textView;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(arrayList.get(groupPosition));
return textView;
}

@Override
public long getGroupId(int groupPosition) {
return 0;//可以不填
}

@Override
public int getGroupCount() {
return arrayList.size();//有几组
}

@Override
public Object getGroup(int groupPosition) {
return null;//可以不填
}

@Override
public int getChildrenCount(int groupPosition) {
return 1;//每组只有一个gridview,要清楚
}

@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
GridViewHolder gridViewHolder;
if(convertView==null)
{
gridViewHolder = new GridViewHolder();
convertView= getLayoutInflater().inflate(R.layout.expandlist_gridview, null);
gridViewHolder.gridview=(GridView) convertView.findViewById(R.id.gridView1);
convertView.setTag(gridViewHolder);
}
else
{
gridViewHolder= (GridViewHolder)convertView.getTag();
}
switch (groupPosition)
{
case 0:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, basiclist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,basiclist));
break;
case 1:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, mxhomelist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,mxhomelist));
break;
case 2:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, applicationlist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,applicationlist));
break;

default:
gridViewHolder.gridview.setAdapter(new MyAdapter(AppCategoryActivity.this, mxhomelist));
gridViewHolder.gridview.setOnItemClickListener(new MyOnItemClickListener(AppCategoryActivity.this,mxhomelist));
break;
}
return convertView;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;//可以不填
}

@Override
public Object getChild(int groupPosition, int childPosition) {
return null;//可以不填
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_category);
iniList();
iniText();

setListAdapter(adapter);

}

private void iniText()
{
arrayList = new ArrayList<String>();
arrayList.add("Basic Programs");
arrayList.add("MXHome");
arrayList.add("Applications");
arrayList.add("News & Weather");
arrayList.add("Entertainment");
arrayList.add("Life Style");
arrayList.add("Communication");
arrayList.add("Edu & Finance");
arrayList.add("Multimedia");
arrayList.add("Tools & ETC");
}

private void iniList()
{
applist = MyApplication.getAPPlist();
TextView all =(TextView) findViewById(R.id.textView2);
all.setText("all programs(" + applist.size()+")");
mxhomelist = new ArrayList<APP>();
basiclist = new ArrayList<APP>();
applicationlist = new ArrayList<APP>();
for (int i = 0; i <applist.size(); i++)
{
APP app = applist.get(i);
if((app.getLabel()+"").contains("我的桌面"))
{
mxhomelist.add(app);
}
else if(i<=15)
{
basiclist.add(app);
}
else if(i>15)
{
applicationlist.add(app);
}
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_app_category, menu);
return true;
}


}

分享到:
评论

相关推荐

    ExpandableListView 中完美嵌套 GridView

    在Android开发中,有时我们需要创建复杂布局以满足用户界面的需求,比如在一个ExpandableListView中嵌套GridView。这种设计可以提供层次分明且可扩展的数据展示,让用户能够方便地浏览和操作多级数据。本文将深入...

    Android开发 ExpandableListView嵌套GridView的实现

    3. **处理`GridView`的高度**:由于`GridView`的默认高度可能不适合嵌套在`ExpandableListView`中,因此我们需要在`getChildView()`中动态计算`GridView`的高度。可以遍历`GridView`的所有子项,根据子项的高度计算...

    ExpandableListView 嵌套gridView

    而在这个特定的案例中,我们将讨论如何将 `GridView` 嵌套在 `ExpandableListView` 的各个分组中,为用户提供更复杂的布局和交互体验。 首先,我们要理解 `ExpandableListView` 的基本工作原理。`...

    android中ExpandableListView嵌套GridView的使用

    下面将详细介绍如何在`Android`中实现`ExpandableListView`嵌套`GridView`。 ### 1. ExpandableListView基本概念 `ExpandableListView`是Android提供的一个特殊的列表控件,它可以显示分组数据,每个分组下可以...

    ExpandableListView嵌套GridView的混合使用

    1、ExpandableListView嵌套GridView 2、group中自定义文字和图片 原文章在 http://blog.csdn.net/u011123829/article/details/9278351

    安卓ExpandableListView嵌套Gridview嵌套用法,与多点触控图片缩放

    本篇文章将详细探讨如何在Android中实现ExpandableListView嵌套GridView,以及如何实现多点触控图片缩放的功能。 首先,ExpandableListView是一种可以展开和折叠的列表视图,用于展示层次结构的数据。它允许每个父...

    ExpandableListView嵌套GridView,GridView中的item带有选中功能

    在这个主题中,我们将深入探讨如何在`ExpandableListView`中嵌套`GridView`,并实现`GridView`中每个item的选中功能。 首先,我们需要创建一个`ExpandableListView`。这个控件可以用来展示分组数据,每组数据可以...

    Android开发丶ExpandableListView嵌套GridView的实现

    在`ExpandableListView`中嵌套`GridView`的实现过程主要包括以下几个步骤: 1. **创建适配器**:首先,你需要创建一个自定义的`ExpandableListAdapter`,继承自`BaseExpandableListAdapter`。这个适配器将负责填充`...

    android中ExpandableListView嵌套ListView和GridView的使用

    本文将详细讲解如何在`ExpandableListView`中嵌套`ListView`和`GridView`。 首先,理解`ExpandableListView`的基本用法。`ExpandableListView`是Android提供的一个可扩展的列表视图,它允许用户点击父项来显示或...

    Listview 嵌套gridview

    但很多人不需要ExpandableListView 只是单纯的ListView",这表明开发者可能发现了一个常见但并非总是必要的场景,即使用可展开的ListView(ExpandableListView)来嵌套GridView。ExpandableListView允许用户展开或...

    ExpandableListView,recyclerview的使用

    在Android开发中,`ExpandableListView`、`RecyclerView`以及`ListView`是三种常见的列表控件,用于展示可滚动的数据集合。本篇文章将深入探讨这三个组件的使用方法、特点及它们之间的区别。 首先,`...

    可展开列表ExpandableListView嵌套GirdView demo

    下面将详细解释如何实现“可展开列表ExpandableListView嵌套GirdView”的功能。 首先,我们需要理解ExpandableListView的基本用法。它由两部分组成:Group(组)和Child(子项)。Group表示可以折叠或展开的父级...

    解决scrollView和gridView和ListView嵌套的冲突

    2. **自定义ListView或GridView**:如果你确实需要嵌套,可以考虑自定义ListView或GridView,重写onMeasure方法,使其只测量一次,而不是在ScrollView中无限循环测量。这样可以防止滚动冲突。 3. **限制ScrollView...

    GridView+72般绝技,分页排序,详细介绍gridview的各种用法,并用代码演示.

    7. 分组显示:通过嵌套GridView或使用ExpandableListView,实现数据的分组展示。 8. 滑动刷新和加载更多:结合SwipeRefreshLayout,实现上拉刷新和下拉加载更多功能。 9. 横向滚动:通过设置横竖轴的滚动方向,...

    expandlist嵌套双listview

    而在此场景下,我们需要在每个ExpandableListView的子列表项中再嵌套一个ListView,形成双层列表结构,进一步增强数据展示的层次感。 首先,理解expandlist(即ExpandableListView)的工作原理至关重要。...

    ScrollView和ListView和GridView冲突解决之自定义ListView和GridView

    4. **使用Header和Footer**:如果需要在ListView或GridView上方添加额外内容,可以使用addHeaderView或addFooterView方法,而不是嵌套在一个ScrollView中。 自定义ListView和GridView的步骤通常包括: 1. **创建...

    ListView_GridView2

    在Android开发中,ListView和GridView是两种常用的列表控件,用于展示大量的数据项。本项目“ListView_GridView2”旨在实现一个类似QQ好友列表的界面,通过ListView展示好友信息,结合自定义适配器和视图复用机制,...

    Android ScrollView 下嵌套 ListView 或 GridView出现问题解决办法

    然而,这样的组合往往会引发一个问题,即ListView或GridView中的数据只能显示一行,其余内容无法正常滚动展示。这是因为ScrollView和ListView(或GridView)都具有滚动功能,它们的滚动条会互相冲突,导致滚动行为...

    Android笔记之:在ScrollView中嵌套ListView的方法

    此外,还有其他一些相关的Android开发知识点,例如如何解决ScrollView嵌套GridView或ExpandableListView时的冲突,如何在ScrollView中嵌套其他可滚动视图(如ViewPager)等。这些都需要开发者深入理解Android的触摸...

    Android-ExpandableListView.rar_android开发_Java_

    在描述中提到的"Android ExpandableListView ContainGridView"可能是指在每个子项中嵌套了一个`GridView`。这可以实现更复杂的布局,比如每个子项包含多列信息。要实现这一点,你需要在子项的XML布局文件中添加`...

Global site tag (gtag.js) - Google Analytics