ListView嵌套GridView

/**
 * 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

*/

1、MainActivity

package com.tianyu.customlistview; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import com.tianyu.customlistview.adapter.ListViewAdapter; 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.activity_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); } } }

2、ListViewAdapter

package com.tianyu.customlistview.adapter; 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; import android.widget.TextView; import com.tianyu.customlistview.R; public class ListViewAdapter extends BaseAdapter { private final ArrayList<ArrayList<HashMap<String, Object>>> mList; private final 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.item_listview, null, false); holder.imageView = (ImageView) convertView .findViewById(R.id.listview_item_imageview); holder.mTxtName = (TextView) convertView .findViewById(R.id.txt_item_name); holder.mTxtContent = (TextView) convertView .findViewById(R.id.txt_item_content); 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.fresh)); holder.mTxtContent.setText("天网恢恢疏而不漏"); holder.mTxtName.setText("潇湘夜雨"); } 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; TextView mTxtName; TextView mTxtContent; } }

3、GridViewAdapter

package com.tianyu.customlistview.adapter; 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; import com.tianyu.customlistview.R; public class GridViewAdapter extends BaseAdapter { private final Context mContext; private final 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.item_gridview, 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; } }

4、资源文件

1)、mainActivity的layout文件

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

2)。listView的子布局文件

<LinearLayout 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"     android:orientation="vertical" >     <LinearLayout         android:layout_width="match_parent"         android:layout_height="50dp"         android:orientation="horizontal" >         <ImageView             android:id="@+id/listview_item_imageview"             android:layout_width="0dp"             android:layout_height="wrap_content"             android:layout_weight="0.5"             android:src="@drawable/fresh" />         <LinearLayout             android:layout_width="0dp"             android:layout_height="wrap_content"             android:layout_gravity="center_vertical"             android:layout_weight="1"             android:orientation="vertical" >             <TextView                 android:id="@+id/txt_item_name"                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:text="潇湘夜雨"                 android:textSize="18sp"                 android:textStyle="bold" />             <TextView                 android:id="@+id/txt_item_content"                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:text="潇湘夜雨"                 android:textSize="16sp" />         </LinearLayout>     </LinearLayout>     <com.tianyu.customlistview.view.CustomGridView         android:id="@+id/listview_item_gridview"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:horizontalSpacing="5dip"         android:numColumns="3"         android:stretchMode="columnWidth"         android:verticalSpacing="5dip" /> </LinearLayout>

3)。gridview的子布局文件

<LinearLayout 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"     android:orientation="vertical" >     <Button         android:id="@+id/gridview_item_button"         android:layout_width="140dip"         android:layout_height="40dip"         android:background="@drawable/fresh"         android:clickable="true"         android:textColor="@android:color/background_light" /> </LinearLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值