ListView嵌套GridView
来源:互联网 发布:js让页面重新加载 编辑:程序博客网 时间:2024/09/21 06:37
/** * 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;@Overrideprotected 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;}@Overridepublic int getCount() {if (mList == null) {return 0;} else {return this.mList.size();}}@Overridepublic Object getItem(int position) {if (mList == null) {return null;} else {return this.mList.get(position);}}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}@Overridepublic int getCount() {if (mList == null) {return 0;} else {return this.mList.size();}}@Overridepublic Object getItem(int position) {if (mList == null) {return null;} else {return this.mList.get(position);}}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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() {@Overridepublic 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>
- ScrollView嵌套ListView,GridView;ListView嵌套ListView,GridView;ExpanderListView嵌套...
- ListView嵌套GridView
- ListView 中嵌套 GridView
- ListView嵌套GridView
- ListView中嵌套gridview
- ScrollView嵌套GridView、ListView
- listview中嵌套gridview
- ListView 嵌套 GridView 大法
- ListView嵌套GridView解决方案
- ListView嵌套GridView
- ListView嵌套GridView
- ScrollView嵌套ListView、GridView
- ScrollView 嵌套 ListView GridView
- ListView嵌套GridView
- ListView嵌套GridView问题
- ListView 嵌套gridview
- ListView嵌套GridView
- 关于listview嵌套gridview
- cocosPods下载第三方库使用
- Socket编程中用send发送结构体
- Java学习之多线程
- Ubuntu 常用命令
- NSObject的load和initialize方法
- ListView嵌套GridView
- iOS 第三方Reachability网络检测
- 简单总结RectF、Rect 和Matrix ,还有Paint的使用方法
- MFC中关于控件和变量对应方法
- 竞态条件
- sql order by错top(100)percent
- iOS集成环信聊天和EaseUI之后出现警告:Warning! ivar size mismatch in PSUICollectionView_ - can't change the supercl
- 隐藏css中超出TD宽度的字段的方法
- 微信公众号开发接入指南