ListView 中嵌套 GridView

时间:2023-03-10 00:15:12
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); } }