ListView嵌套GridView使用详解及注意事项

MainActivity如下:

复制代码 代码如下:

package cn.testlistviewandgridview;

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如下:

复制代码 代码如下:

package cn.testlistviewandgridview;

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如下:

复制代码 代码如下:

package cn.testlistviewandgridview;

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如下:

复制代码 代码如下:

package cn.testlistviewandgridview;

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如下:

复制代码 代码如下:

<RelativeLayout

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如下:

复制代码 代码如下:

<?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="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如下:

复制代码 代码如下:

<?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"

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>

时间: 2024-08-03 04:06:37

ListView嵌套GridView使用详解及注意事项的相关文章

ListView嵌套GridView使用详解及注意事项_Android

MainActivity如下: 复制代码 代码如下: package cn.testlistviewandgridview; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; /** * Demo描述: * ListView嵌套GridView使用详解 * 即List

ListView嵌套GridView使用详解

MainActivity如下: package cn.testlistviewandgridview; 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

Android开发中ListView嵌套GridView问题详解

开发中,遇到一个问题,是ListView嵌套GridView,需要点击整个ListView的Item进行跳转.但是在点击GridView区域时无法进行页面的跳转.这是因为GridView获得了焦点.导致点击无法跳转. 解决方法就是: 1.在Item最外层加上 android:descendantFocusability="blocksDescendants" 2.在Adapter中添加 holder.mGridView.setClickable(false); holder.mGrid

安卓-Android开发ListView嵌套GridView,如何更加优化

问题描述 Android开发ListView嵌套GridView,如何更加优化 我在ListView中嵌套GridView,效果实现了,但我在ListView的getView()中是 new GridViewAdapter(``````),也就是说我每一个大的ListView的Item都有去new 一个GridView的适配器,这样对内存不好.可我想通过notifyDataSetChanged()来 改变嵌套的GridView中的数据,一直实现不了...求高手解答··· 解决方案 用viewho

listview嵌套gridview gridview的itemonClick为上一次的click

问题描述 listview嵌套gridview gridview的itemonClick为上一次的click 想要实现点击图片 弹出大图的功能.本来想在adapter里 的gridview设置setOnItemClick 然后触发回调.但是 ItemClick 每一次点击 都触发上一次的效果..我测试时 设置的点击事件是输出点击的position 效果是这样的 第一次点击 不输出, 第二次点击,输出第一次点击的位置,第三次点击输出第二次点击的位置.有人遇到过这个问题吗- - 还有显示大图的功能用

图片- Android ListView嵌套GridView点击事件的分发!!!!

问题描述 Android ListView嵌套GridView点击事件的分发!!!! 现在我在实现一个类似朋友圈的功能,布局需要用到ListView嵌套GridView.我也知道这样用不是太好,但这样能够实现需求所以就这样写了.如果哪位有更好的替换的方法,还请赐教.例如:我现在每行显示三张图片,但现在只有一张图片,所以就会有两张图片的位置会空出来.我为了要实现点击图片还能够看大图设置了GridView的onitemclick事件.问题来了,当我点击空白部分的时候,结果还是触发了GridView的

Android ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多

ScrollView 效果 ScrollView 说明 一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo. 主要是重写了GridView和LsitView中的onMeasure 方法. 写的比较简单,希望对初学者有帮助. /*** * 主要思路是 * ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新. * * 逻辑在适配器做了处理 * * 我们只让ListView加载2个数据Item,第一个是item对

listview-关于ListView嵌套GridView数据方面的处理

问题描述 关于ListView嵌套GridView数据方面的处理 如下图:ListView的item中是一个GridView,然后GridView的item就是显示一张图片,另外数据还要排序.感觉好复杂,数据用什么来进行保存呢?map吗?又是怎么进行排序绑定的?另外点击事件又是怎么获取点击的那张图片呢?因为每个item中GridView都不是同一个,所有下标都是从0开始的.好纠结,求前辈赐教,先谢谢了! 解决方案 1.gridview一般采用的是数据源绑定的方式来显示的,所有你觉得的复杂的东西都

listview嵌套gridview问题

问题描述 listview嵌套gridview问题 listview嵌套gridview如何让listview刷新而gridview的adapter不刷新 解决方案 好记性不如烂笔头,时常记录才有收获,若天天加着班,打个哈欠一天就过去了,那还有什么意义呢? 需求:点击在一起的人,进入好友列表(最近联系.姓名首字母排序),可选择一个或多个(选中者在顶部有缩略图显示),点击头像取消选择.选择完毕返回至发布界面,再次点击"和谁在一起"图标,重新进入选择在一起的人界面,并保留先前选择的好友列表