需要自定義GridView,重寫onMeasure方法
package com.administrator.jizhangben;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
* Created by Administrator on 2016/3/25.
*/
public class MyGridView extends GridView{
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
主界面代碼:
package com.administrator.jizhangben;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
import com.administrator.jizhangben.adapter.WeekLvAdapter;
import com.administrator.jizhangben.bean.Week;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView lv_week;
private WeekLvAdapter wla;
private List<Week> lvList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_week = (ListView)this.findViewById(R.id.lv_week);
lvList = new ArrayList<>();
setData();
wla = new WeekLvAdapter(this, lvList);
lv_week.setAdapter(wla);
}
/**
* 設定資料源
*/
private void setData() {
for (int i=0;i<10;i++){
List<String> gvList = new ArrayList<>();
for (int j=0;j<10;j++){
gvList.add(j + "");
}
Week week = new Week();
week.setTop("第" + i + "個");
week.setWeeks(gvList);
lvList.add(week);
}
}
}
ListView擴充卡代碼:
package com.administrator.jizhangben.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.administrator.jizhangben.MyGridView;
import com.administrator.jizhangben.R;
import com.administrator.jizhangben.bean.Week;
import java.util.List;
/**
* Created by Administrator on 2016/3/25.
*/
public class WeekLvAdapter extends BaseAdapter{
private List<Week> lvList;
private LayoutInflater lif;
private WeekGvAdapter wga;
private Context context;
public WeekLvAdapter(Context context, List<Week> lvList) {
super();
this.lvList = lvList;
this.context = context;
lif = LayoutInflater.from(context);
}
/**
* 計算ListVeiw裡面的資料長度
*/
@Override
public int getCount() {
return lvList==null?0:lvList.size();
}
/**
* 根據下标傳回下标對應的data資料的對象
*/
@Override
public Object getItem(int position) {
return lvList==null?null:lvList.get(position);
}
/**
* 傳回下标
*/
@Override
public long getItemId(int position) {
return position;
}
/**
* 傳回視圖
* 參數1:指資料在ListView裡面的下标
* 參數2:ListVewi上面顯示控件對象
* 參數3:控件的父布局
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if (convertView == null) {
vh = new ViewHolder();
convertView = lif.inflate(R.layout.week_item,null);
vh.gv = (MyGridView)convertView.findViewById(R.id.gv_week);
vh.tv = (TextView)convertView.findViewById(R.id.tv_top);
convertView.setTag(vh);
}else {
vh = (ViewHolder) convertView.getTag();
}
//設定GridView
wga = new WeekGvAdapter(context,lvList.get(position).getWeeks());
vh.gv.setAdapter(wga);
//GridView點選事件
vh.gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, longid) {
Toast.makeText(context, position+1+"", Toast.LENGTH_SHORT).show();
}
});
//設定文本
vh.tv.setText(lvList.get(position).getTop());
return convertView;
}
static class ViewHolder{
MyGridView gv;
TextView tv;
}
}
GridView擴充卡代碼:
package com.administrator.jizhangben.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.administrator.jizhangben.R;
import java.util.List;
/**
* Created by Administrator on 2016/3/25.
*/
public class WeekGvAdapter extends BaseAdapter{
private List<String> gvList;
private LayoutInflater lif;
public WeekGvAdapter(Context context,List<String> gvList) {
super();
this.gvList = gvList;
lif = LayoutInflater.from(context);
}
/**
* 計算ListVeiw裡面的資料長度
*/
@Override
public int getCount() {
return gvList==null?0:gvList.size();
}
/**
* 根據下标傳回下标對應的data資料的對象
*/
@Override
public Object getItem(int position) {
return gvList==null?null:gvList.get(position);
}
/**
* 傳回下标
*/
@Override
public long getItemId(int position) {
return position;
}
/**
* 傳回視圖
* 參數1:指資料在ListView裡面的下标
* 參數2:ListVewi上面顯示控件對象
* 參數3:控件的父布局
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if (convertView == null) {
vh = new ViewHolder();
convertView = lif.inflate(R.layout.week_item_item,null);
vh.tv = (TextView)convertView.findViewById(R.id.tv_item);
convertView.setTag(vh);
}else {
vh = (ViewHolder) convertView.getTag();
}
vh.tv.setText(gvList.get(position));
return convertView;
}
static class ViewHolder{
TextView tv;
}
}
bean類代碼:
package com.administrator.jizhangben.bean;
import java.util.List;
/**
* Created by Administrator on 2016/3/25.
*/
public class Week {
private String top;
private List<String> weeks;
public List<String> getWeeks() {
return weeks;
}
public void setWeeks(List<String> weeks) {
this.weeks = weeks;
}
public String getTop() {
return top;
}
public void setTop(String top) {
this.top = top;
}
}