GridView简单封装收缩和展开
来源:互联网 发布:艾可萨兽数据 编辑:程序博客网 时间:2024/06/06 19:23
效果
收缩
展开
思路
通过Button的点击事件来改变Adapter中的数据,然后来更新视图
代码
- Activity
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.GridView;import android.widget.ListAdapter;import android.widget.TextView;import com.keith.test.R;import java.util.ArrayList;import java.util.List;public class TestActivity extends AppCompatActivity { //收缩时显示的行数 private static final int SHOWED_LINES = 2; //GridView的列数 private static final int NUM_COLUMNS = 4; private List<String> mlist; private List<String> mList; private List<String> mList2; //是否收缩标志,默认收缩 private boolean mIsShrink = true; private GridView mGridView; //收缩和展开按钮 private Button mToggle; private BaseAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); mGridView = (GridView) findViewById(R.id.gv); mToggle = (Button) findViewById(R.id.btn_loadmore); mList = new ArrayList(); mList2 = new ArrayList(); //初始化数据 for (int i = 0; i < 21; i++) { mList.add("mList - " + i); } for (int i = 0; i < NUM_COLUMNS * SHOWED_LINES; i++) { mList2.add(mList.get(i)); } //默认收缩 mlist = mList2; //初始化Adapter mAdapter = new BaseAdapter() { @Override public int getCount() { return mlist.size(); } @Override public Object getItem(int position) { return mlist.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View v, ViewGroup parent) { v = LayoutInflater.from(TestActivity.this).inflate(R.layout.item_gv, null); TextView tv = (TextView) v.findViewById(R.id.item_txt_gv); tv.setText(mlist.get(position)); return v; } }; //绑定Adapter mGridView.setAdapter(mAdapter); mToggle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mIsShrink) { expand(); } else { collapse(); } //每次点击都要调用 setListViewHeightBasedOnChildren(mGridView); } }); //第一次调用 setListViewHeightBasedOnChildren(mGridView); } //展开 private void expand() { mlist = mList; mAdapter.notifyDataSetChanged(); mToggle.setText("收起"); mIsShrink = false; } //收缩 private void collapse() { for (int i = 0; i < 8; i++) { mlist = mList2; } mAdapter.notifyDataSetChanged(); mToggle.setText("更多"); mIsShrink = true; } /** * 当GridView外层有ScrollView时,需要动态设置GridView高度 * * @param gridview */ protected void setListViewHeightBasedOnChildren(GridView gridview) { if (gridview == null) return; ListAdapter listAdapter = gridview.getAdapter(); if (listAdapter == null) return; int totalHeight; //向上取整 int count = (int) Math.ceil(listAdapter.getCount() / 4.0); //获取一个子view View itemView = listAdapter.getView(0, null, gridview); //测量View的大小 itemView.measure(0, 0); totalHeight = itemView.getMeasuredHeight(); ViewGroup.LayoutParams params = gridview.getLayoutParams(); //设置GridView的布局高度 params.height = totalHeight * count; gridview.setLayoutParams(params); }}
主布局 activity_test.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <GridView android:id="@+id/gv" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="4" /> <TextView android:layout_width="match_parent" android:layout_height="1dp" android:background="#000000" /> <Button android:id="@+id/btn_loadmore" android:layout_width="match_parent" android:layout_height="32dp" android:background="#00000000" android:gravity="center" android:text="更多" android:textSize="14sp" /> </LinearLayout></ScrollView></RelativeLayout>
GridView子布局 item_gv.xml
<?xml version="1.0" encoding="utf-8"?><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/item_txt_gv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="test" android:textColor="#00FF00" android:textSize="20sp" android:textStyle="bold" /></LinearLayout>
0 0
- GridView简单封装收缩和展开
- 封装可展开和收缩的View
- 展开和收缩
- 收缩和展开效果
- ExpandableTextView(带收缩和展开的简单自定义textview)
- 最简单JS实现展开收缩代码
- 原生js实现简单的展开收缩
- ScrollView中使用ListView、GridView以及展开、收缩动画
- 在IE中展开和收缩节点
- JQuery的一种特效:展开和收缩
- AccordionPane实现自动展开和收缩
- Jquery实现的文本展开和收缩
- eclipse 代码收缩和展开;设置快捷键
- 可展开和收缩的表格
- Flex 中Tree全部展开和收缩
- jQuery实现图片的展开和收缩
- jquery实现table表展开和收缩
- 表格展开和收缩,表格折叠
- 字符集
- Android——处理R文件丢失或报错问题
- 新的开始+Grad第一学期短期规划
- Gson反序列化详解
- 报表生成关键思想点:
- GridView简单封装收缩和展开
- Less中的颜色计算溢出
- 黑马程序员--Protocol 代理协议
- 【bzoj4147】 [AMPPZ2014]Euclidean Nim
- Web开发笔记
- 【Unity】UGUI如何判断鼠标或者手指是否点击到UI上
- CSS 长度单位
- <stl>将bytes上调至8的倍数
- 让DropDownlist显示ToolTip(两部分)