ListView+GridView实现行列不确定的表格
来源:互联网 发布:golang mongodb 查询 编辑:程序博客网 时间:2024/05/19 18:14
请尊重个人劳动成果,转载注明出处,谢谢!
http://blog.csdn.net/xiaxiazaizai01
第一次写博客,内心还是有点小紧张,废话不多说,老规矩,上效果图:
因为项目需要,需求是做一个行列都不确定的表格,其实,实现一个表格可以采用多种方式,这里我采用的是用ListView+GridView的方式实现,老鸟请绕道,菜鸟勿喷啊….额,又说了很多废话,我的一贯风格是直奔主题,哈哈。。。上代码
首先是XML文件,这里我们只需要定义个listview控件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#ffffff" android:padding="16dp" android:dividerHeight="1dp" /></RelativeLayout>
gridview则作为listview的item
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.ch.MyGridView android:id="@+id/myGridView" android:layout_width="match_parent" android:layout_height="match_parent" android:horizontalSpacing="1dp" android:verticalSpacing="1dp" /></RelativeLayout>
大家都知道listview嵌套gridview时,经常会出现gridview只显示一行的情况,这里我们重写gridview
public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }}
而gridview的item中我们只放一个textview(这里就不再繁琐了)
下面开始写我们的适配器
首先是ListViewAdapter:
public class ListViewAdapter extends BaseAdapter { private Context context; private List<TestBean> list; public ListViewAdapter(Context context,List<TestBean> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.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){ convertView = LayoutInflater.from(context).inflate(R.layout.item_listview, null); holder = new ViewHolder(); holder.gridView = (MyGridView) convertView.findViewById(R.id.myGridView); convertView.setTag(holder); } holder = (ViewHolder) convertView.getTag(); //表格的横向纵向数目都是不确定的,这里获取给出的列数 holder.gridView.setNumColumns(list.get(position).getColumnData().size()); GridViewAdapter gridViewAdapter = new GridViewAdapter(context,list.get(position).getColumnData(),position); holder.gridView.setAdapter(gridViewAdapter); return convertView; } class ViewHolder{ private MyGridView gridView; }}
然后是GridViewAdapter:
public class GridViewAdapter extends BaseAdapter { private Context context; private List<ColumnBean> list; private int lvPosition;//ListView每个item显示的位置,用于设置不同item的不同颜色 public GridViewAdapter(Context context, List<ColumnBean> list,int lvPosition) { this.context = context; this.list = list; this.lvPosition = lvPosition; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.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){ convertView = LayoutInflater.from(context).inflate(R.layout.item_gridview, null); holder = new ViewHolder(); holder.tvContent = (TextView) convertView.findViewById(R.id.tvContent); convertView.setTag(holder); } holder = (ViewHolder) convertView.getTag(); if(lvPosition == 0){ //listview中的第一个item的背景颜色 holder.tvContent.setBackgroundColor(Color.parseColor("#4f81ff")); }else{ if((lvPosition - 1) % 2 == 0){ //偶数行 holder.tvContent.setBackgroundColor(0xffd0d8e8); }else{ //除了第一行以外的奇数行 holder.tvContent.setBackgroundColor(Color.GRAY); } } holder.tvContent.setText(list.get(position).getData()); return convertView; } class ViewHolder{ private TextView tvContent; }}
上面adapter中涉及到两个实体类,接下来是我们的实体类了
public class TestBean implements Serializable { private List<ColumnBean> columnData; public List<ColumnBean> getColumnData() { return columnData; } public void setColumnData(List<ColumnBean> columnData) { this.columnData = columnData; }}
public class ColumnBean implements Serializable { private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } public ColumnBean(String data) { this.data = data; }}
最后再看下我们的主Activity部分
public class OtherActivity extends AppCompatActivity { private ListViewAdapter lvAdapter; private List<TestBean> lineList; private List<ColumnBean> columnList; private ListView myListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_other); setTitle("OtherActivity"); myListView = (ListView) findViewById(R.id.lv); //测试数据 lineList = new ArrayList<TestBean>(); for(int i=0;i<6;i++){//设置有多少行 TestBean testBean = new TestBean(); columnList = new ArrayList<>(); testBean.setColumnData(columnList); for(int j=0;j<5;j++){//设置有多少列 ColumnBean columnBean = new ColumnBean("测试列"+j); columnList.add(columnBean); } lineList.add(testBean); } lvAdapter = new ListViewAdapter(this,lineList); myListView.setAdapter(lvAdapter); }}
实现起来比较简单,主要代码均已贴出,这里代码就不再上传了,啰嗦了半天…希望对您能有所帮助。
1 0
- ListView+GridView实现行列不确定的表格
- scrollview嵌套listview或者GridView大小不确定
- 同时选择表格行列的实现
- ListView实现GridView的效果
- 在Word中实现表格的行列互换
- 表格行列高亮显示的实现(二)
- C++ 从键盘读入行列不确定的字符串
- GridView行列的取值
- Android ListView 实现 GridView 用以实现GridView的下拉刷新
- 用ListView实现GridView的效果
- RecyclerView实现ListView和GridView的效果
- 绚丽的ListView表格效果的实现
- ListView实现漂亮的自定义表格实例
- ListView实现漂亮的自定义表格实例
- ListView实现漂亮的自定义表格实例
- ListView实现GridView
- ListView实现GridView
- 用ListView实现GridView
- redis脚本:查看近一小时内有哪些用户登录过redis
- 项目管理心得:一个项目经理的个人体会、经验总结
- sql基本语句转载
- IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
- Thread Pool
- ListView+GridView实现行列不确定的表格
- 从程序员到项目经理
- iOS实现二维码的彩色效果
- 【解题报告】Codeforces Round #363 (Div. 2)
- 字符串只保留开头跟最后一个字符
- C语言 冒泡排序
- 软件公司的两种管理方式
- 阴阳五行
- 自动完成文本框(AutoCompleteTextView)提示文本框