ListView嵌套GridView使用详解及注意事项
- ***根目录添加一句android:descendantFocusability="blocksDescendants"********
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
/**
* Demo描述:
* ListView嵌套GridView使用详解
* 即ListView的每个Item中都包含一个GridView
*
* 注意事项:
* 由于ListView和GridView都是可滑动的控件.
* 所以需要自定义GridView,重写其onMeasure()方法.
* 在该方法中使GridView的高为wrap_content的大小,否则GridView中
* 的内容只能显示很小一部分
*
* 参考资料:
* 1 http://bbs.csdn.net/topics/380245627
* 2 http://blog.csdn.net/lsong89/article/details/8598856
* Thank you very much
*/
public class MainActivity extends Activity {
private ListView mListView;
private ListViewAdapter mListViewAdapter;
private ArrayList<ArrayList<HashMap<String,Object>>> mArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
mListView=(ListView) findViewById(R.id.listView);
initData();
mListViewAdapter=new ListViewAdapter(mArrayList, MainActivity.this);
mListView.setAdapter(mListViewAdapter);
}
private void initData(){
mArrayList=new ArrayList<ArrayList<HashMap<String,Object>>>();
HashMap<String, Object> hashMap=null;
ArrayList<HashMap<String,Object>> arrayListForEveryGridView;
for (int i = 0; i < 10; i++) {
arrayListForEveryGridView=new ArrayList<HashMap<String,Object>>();
for (int j = 0; j < 5; j++) {
hashMap=new HashMap<String, Object>();
hashMap.put("content", "i="+i+" ,j="+j);
arrayListForEveryGridView.add(hashMap);
}
mArrayList.add(arrayListForEveryGridView);
}
}
}
ListViewAdapter如下:
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class ListViewAdapter extends BaseAdapter {
private ArrayList<ArrayList<HashMap<String, Object>>> mList;
private Context mContext;
public ListViewAdapter(ArrayList<ArrayList<HashMap<String, Object>>> mList, Context mContext) {
super();
this.mList = mList;
this.mContext = mContext;
}
@Override
public int getCount() {
if (mList == null) {
return 0;
} else {
return this.mList.size();
}
}
@Override
public Object getItem(int position) {
if (mList == null) {
return null;
} else {
return this.mList.get(position);
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from
(this.mContext).inflate(R.layout.listview_item, null, false);
holder.imageView = (ImageView) convertView.findViewById(R.id.listview_item_imageview);
holder.gridView = (GridView) convertView.findViewById(R.id.listview_item_gridview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (this.mList != null) {
if (holder.imageView != null) {
holder.imageView.setImageDrawable
(mContext.getResources().getDrawable(R.drawable.e));
}
if (holder.gridView != null) {
ArrayList<HashMap<String, Object>> arrayListForEveryGridView = this.mList.get(position);
GridViewAdapter gridViewAdapter=new GridViewAdapter(mContext, arrayListForEveryGridView);
holder.gridView.setAdapter(gridViewAdapter);
}
}
return convertView;
}
private class ViewHolder {
ImageView imageView;
GridView gridView;
}
}
GridViewAdapter如下:
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Toast;
public class GridViewAdapter extends BaseAdapter{
private Context mContext;
private ArrayList<HashMap<String, Object>> mList;
public GridViewAdapter(Context mContext,ArrayList<HashMap<String, Object>> mList) {
super();
this.mContext = mContext;
this.mList = mList;
}
@Override
public int getCount() {
if (mList == null) {
return 0;
} else {
return this.mList.size();
}
}
@Override
public Object getItem(int position) {
if (mList == null) {
return null;
} else {
return this.mList.get(position);
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from
(this.mContext).inflate(R.layout.gridview_item, null, false);
holder.button = (Button)convertView.findViewById(R.id.gridview_item_button);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (this.mList != null) {
HashMap<String, Object> hashMap = this.mList.get(position);
if (holder.button != null) {
holder.button.setText(hashMap.get("content").toString());
holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, "第"+(position+1)+"个", Toast.LENGTH_SHORT).show();
}
});
}
}
return convertView;
}
private class ViewHolder {
Button button;
}
}
NoScrollGridView如下:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
public class NoScrollGridView extends GridView {
public NoScrollGridView(Context context) {
super(context);
}
public NoScrollGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
main.xml如下:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="false"
/>
</RelativeLayout>
listview_item.xml如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ImageView
android:id="@+id/listview_item_imageview"
android:layout_width="fill_parent"
android:layout_height="20dip"
android:scaleType="fitXY"
android:src="@drawable/e"
/>
<cn.testlistviewandgridview.NoScrollGridView
android:id="@+id/listview_item_gridview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchMode="columnWidth"
android:verticalSpacing="5dip"
android:horizontalSpacing="5dip"
android:numColumns="2"/>
</LinearLayout>
gridview_item.xml如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dip"
>
<Button
android:id="@+id/gridview_item_button"
android:layout_width="140dip"
android:layout_height="40dip"
android:background="@drawable/e"
android:textColor="@android:color/background_light"
android:clickable="true"
/>
</LinearLayout>
ListView嵌套GridView使用详解及注意事项的更多相关文章
- GridView内容详解(转载)
GridView内容详解(转载) GridView是ASP.NET界面开发中的一个重要的控件,对GridView使用的熟练程度直接影响软件开发的进度及功能的实现.(车延禄)GridView的主要新特性 ...
- android listView嵌套gridview的使用心得
在开发的过程中可能需要用到listview嵌套gridview的场景,但是在Android中, 不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动 ...
- ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多
ScrollView 效果 ScrollView 说明 一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo. 主要是重写了GridView和Lsit ...
- ListView嵌套GridView
首先,我们通过两个实例来了解下本篇文章所讲的重点,看下图: 微博: 陌陌: 大家应该对这两款软件并不陌生,接下来,我将列举下本文将要实现的几个点: 1.ListView嵌套GridView,互不冲突, ...
- ListView嵌套GridView,显示不全解决办法
ListView嵌套GridView时,遇到了GridView只显示一行,其余都显示不出来的问题,最终解决办法如下: 需要自定义GridView,重新绘制高度即可: public class MyGr ...
- Asp.net中GridView使用详解(很全,很经典 转来的)
Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l ...
- Asp.net中GridView使用详解(引)【转】
Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...
- Flutter中用ListView嵌套GridView报错异常
flutter中的ListView组件和GridView组件都是常用的布局组件,有时候ListView中需要嵌套GridView来使用,例如下图: 这种情况就需要在ListView里面再嵌套一个Gri ...
- Asp.net中GridView使用详解(很全,很经典)
http://blog.csdn.net/hello_world_wusu/article/details/4052844 Asp.net中GridView使用详解 效果图参考:http://hi.b ...
随机推荐
- Android Studio断点调试
Android Studio断点调试 Android Studio包含一个debugger程序,可以帮助你在模拟器和真机上调试你的android应用.通过Android Studio的debugger ...
- iOS开发之使用UICollectionView实现美团App的分类功能【偶现大众点评App的一个小bug】
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- PHP定时执行计划任务
一.Windows计划任务 在web 服务下新建需要执行的文件 二.新建bat文件,命名为test.bat,内容如下: D:\php\php.exe -q D:\website\test.php 三. ...
- 电子商务ICP经营许可证申请条件
电子商务ICP经营许可证申请条件:注册资金100万的纯内资公司:服务器在本地:域名备案以公司名义备案:申请条件:1.公司营业执照副本复印件需清晰有效,并已完成该年度年检事宜,特别注意营业执照的有效期要 ...
- has been modified since the precompiled header地图错误
添加高德地图的一个错误 has been modified since the precompiled header 解决方案: xcode---product----clean 清理重新编译一下就 ...
- Linux相关面试题&答案
Linux相关面试题&答案 Linux面试题&答案 假设apache日志格式为:118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] " ...
- OpenERP(odoo)开发实例之搜索检索过去3个月的数据
转自:http://www.chinamaker.net/ OpenERP(odoo)开发实例之搜索过滤:检索过去3个月的数据 解决这个问题的重点在于 relativedelta 的应用 示例代码如下 ...
- [Mybatis - 1A] - Cause: java.sql.SQLException: Column count doesn't match value count at row 1
严重: Servlet.service() for servlet [springMVC] in context with path [/ExceptionManageSystem] threw ex ...
- python基础教程_学习笔记12:充电时刻——模块
充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...
- Hibernate映射set与List
1.对于set类型,如果集合中的元素是简单地类型,如字符串型,set使用另外一种映射方式: team类: import java.util.HashSet; import java.util.Set; ...