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>

1 0
原创粉丝点击