ListView 中嵌套 GridView

1、主布局文件

<?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:background="#F5F5F5"

    android:orientation="vertical" >



    <ListView

        android:id="@+id/lv_apply_classify"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:cacheColorHint="#00000000"

        android:dividerHeight="10dip"

         >

    </ListView>



</LinearLayout>

2、listview 对应的item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >



    <TextView

        android:id="@+id/tv_apply_classify_name"

        android:layout_width="match_parent"

        android:layout_height="35dip"

        android:layout_marginLeft="10dip"

        android:layout_marginRight="10dip"

        android:gravity="center_vertical"

        android:singleLine="true"

        android:text="应用"

        android:textSize="@dimen/font_body_16"

        android:textColor="@color/black" />



    <com.example.view.ClassifyGridView

        android:id="@+id/gv_toolbar"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="5dip"

        android:layout_marginRight="5dip"

        android:layout_marginTop="5dp"

        android:horizontalSpacing="1dip"

        android:numColumns="2"

        android:verticalSpacing="1dip" >

    </com.<span style="font-family: Arial, Helvetica, sans-serif;">exaple</span><span style="font-family: Arial, Helvetica, sans-serif;">.ClassifyGridView></span>



</LinearLayout>
3、gridview对应的item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:background="@drawable/lv_item_selector"

    android:orientation="vertical"

    android:padding="5dip" >



    <TextView

        android:id="@+id/tv_apply_name"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:layout_gravity="center_horizontal"

        android:layout_marginTop="5dip"

        android:singleLine="true"

        android:text="应用"

        android:textSize="@dimen/font_body_16"

        android:textColor="@color/black" />



    <TextView

        android:id="@+id/tv_description_name"

        android:layout_width="120dip"

        android:layout_height="match_parent"

        android:layout_gravity="center_horizontal"

        android:layout_marginTop="5dip"

        android:maxLines="2"

         android:textSize="@dimen/font_body_14"

        android:text="应用 描述"

        android:textColor="@color/gray" />

 



</LinearLayout>
4、主Activity

public class ClassifyActivity extends Activity {



	private ListView mListView;

	private ClassifyListViewAdapter mListViewAdapter;

	private List<ApplyTest> mArrayList;



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.apply_main_classify);

		init();

	}



	private void init() {

		mListView = (ListView) findViewById(R.id.lv_apply_classify);

		initData();

		mListViewAdapter = new ClassifyListViewAdapter(mArrayList,

				ClassifyActivity.this);

		mListView.setAdapter(mListViewAdapter);

	}



	private void initData() {

		mArrayList = new ArrayList<ApplyTest>();

		 

		for (int i = 0; i < 2; i++) {

			ApplyTest testApplyTest = new ApplyTest();

			testApplyTest.setName("测试分类"+i);

			List<ApplySub> arrayListForEveryGridView = new ArrayList<ApplySub>();

			for (int j = 0; j < 4; j++) {

				ApplySub sub = new ApplySub();

				sub.setName("子项"+i+j);

				arrayListForEveryGridView.add(sub);

			}

			testApplyTest.setSubs(arrayListForEveryGridView);

			mArrayList.add(testApplyTest);

		}



	}



	public class ApplyTest {

		private String name;

		private List<ApplySub> subs;



		public String getName() {

			return name;

		}



		public void setName(String name) {

			this.name = name;

		}



		public List<ApplySub> getSubs() {

			return subs;

		}



		public void setSubs(List<ApplySub> subs) {

			this.subs = subs;

		}



	}



	public class ApplySub {

		private String id;

		private String name;



		public String getId() {

			return id;

		}



		public void setId(String id) {

			this.id = id;

		}



		public String getName() {

			return name;

		}



		public void setName(String name) {

			this.name = name;

		}



	}

}


5、listview适配器

public class ClassifyListViewAdapter extends BaseAdapter {

	private List<ApplyTest> mList;

	private Context mContext;



	public ClassifyListViewAdapter(List<ApplyTest> 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.apply_main_classify_gv, null);

			holder.gridView = (GridView) convertView.findViewById(R.id.gv_toolbar);

			holder.tv_apply_classify_name = (TextView) convertView.findViewById(R.id.tv_apply_classify_name);

			convertView.setTag(holder);

		} else {

			holder = (ViewHolder) convertView.getTag();

		}



		if (this.mList != null) {

			if (holder.gridView != null) {

				ApplyTest mApplyTest = this.mList.get(position);

				ClassifyGridViewAdapter gridViewAdapter = new ClassifyGridViewAdapter(mContext,mApplyTest.getSubs());

				holder.gridView.setAdapter(gridViewAdapter);

				holder.tv_apply_classify_name.setText("分类"+position+mApplyTest.getName());

			}

		}

		return convertView;

	}



	private class ViewHolder {

		GridView gridView;

		public TextView tv_apply_classify_name;

	}

}

6、gridview 适配器

public class ClassifyGridViewAdapter extends BaseAdapter {

	private Context mContext;

	private List<ApplySub> mList;



	public ClassifyGridViewAdapter(Context mContext,

			List<ApplySub> 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.apply_main_classify_group, null);

			holder.tv_apply_name = (TextView) convertView.findViewById(R.id.tv_apply_name);

			holder.tv_description_name = (TextView) convertView.findViewById(R.id.tv_description_name);

			holder.iv_apply_classify_icon =  (RemoteImageView) convertView.findViewById(R.id.iv_apply_classify_icon);

			convertView.setTag(holder);

		} else {

			holder = (ViewHolder) convertView.getTag();

		}



		if (this.mList != null) {

			ApplySub sApplySub = this.mList.get(position);

			if (holder.tv_apply_name != null) {

				holder.tv_apply_name.setText(sApplySub.getName());

//				holder.tv_description_name.setText(hashMap.get("content").toString());

				holder.tv_apply_name.setOnClickListener(new OnClickListener() {

					@Override

					public void onClick(View v) {

						Toast.makeText(mContext, "第" + (position + 1) + "个",

								Toast.LENGTH_SHORT).show();

					}

				});

			}

		}

		return convertView;

	}



	private class ViewHolder {

		TextView tv_apply_name;

		TextView tv_description_name;

	}

}

7、重写gridview让其不滚动

public class ClassifyGridView extends GridView {

	

	public ClassifyGridView(android.content.Context context,android.util.AttributeSet attrs) {

		super(context, attrs);

	}



	/**

	 * 设置不滚动

	 */

	public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

				MeasureSpec.AT_MOST);

		super.onMeasure(widthMeasureSpec, expandSpec);



	}



}




 


你可能感兴趣的:(ListView)