【Android】GridView

来源:互联网 发布:阿里云控制平台 编辑:程序博客网 时间:2024/06/13 08:03

本来是想弄一下倒计时的,但参考了http://blog.csdn.net/androidforme/article/details/49278181的文章后,顺便学会了GridView,也是一个非常简单的东西,ListView是多行单列,这个是多行多列
这里写图片描述

实现的效果:
这里写图片描述

先新建一个工程,然后在activity_main.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"    >    <GridView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/id_grid_view"        android:numColumns="2"><!--两列-->    </GridView></LinearLayout>

在MainActivity 中,先定义写一个适配器

(凡是列表,核心一定是适配器,所以先看适配器)

public class MainActivity extends Activity {    private List<String> list;    private class MyAdapter extends BaseAdapter {        public int getCount() {            return list.size();        }        public Object getItem(int position) {            return null;        }        public long getItemId(int position) {            return 0;        }        @Override        public View getView(int i, View view, ViewGroup viewGroup) {            if (view==null){                view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.d,null);            }            TextView tv=view.findViewById(R.id.tv);            String time=list.get(i);            Date curDate = new Date(System.currentTimeMillis());//获取当前的系统时间            long cur = curDate.getTime();//获取当前时间的毫秒值            long t;            try {                t = time2millionSeconds(time);//把要设置的时间装换成毫秒                String ts = time2time(t - cur);//设置的毫秒减去当前的毫秒,并转换为时分秒                tv.setText(ts);//每秒设置一次            } catch (ParseException e) {                e.printStackTrace();            }            return view;        }    }}

子项文件d.xml如下

<?xml version="1.0" encoding="utf-8"?><LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"     android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv"/></LinearLayout>

两个方法如下,可以直接复制(这个帖子提供的方法比较老,要玩倒计时可以搜索一下DownCountTimer)

public class MainActivity extends Activity {    public String time2time(long t) {        if (t<= 0) {            return  "00时:00分:00秒:000";        }        //long ms = t % 1000;        long s = t / 1000 % 60;        long min = t / 1000 / 60 % 60;        long h = t / 1000 / 60 / 60;        return h + "时:" + min + "分:" + s + "秒";    }    public long time2millionSeconds(String str) throws ParseException {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/HH:mm:ss");//把设置的时间转换成时间格式        long millionSeconds = sdf.parse(str).getTime();//把要设置的时间转换成ms        return millionSeconds;    }}

适配器做好了以后,使用一系列init方法来配置到GridView中

public class MainActivity extends Activity {    private List<String> list;    private GridView mGridView;    private MyAdapter adapter;    private Handler mHandler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initData();        initEvent();    }}

主要还是看初始化数据这一块

public class MainActivity extends Activity {    private void initView(){        mGridView=findViewById(R.id.id_grid_view);    }    private void initData(){        list = new ArrayList<>();        list.add("2017/09/20/12:59:59");//设置的定时时间        list.add("2017/09/20/12:59:59");        list.add("2017/09/20/12:59:59");        list.add("2017/09/20/12:59:59");        list.add("2017/09/20/12:59:59");        list.add("2017/09/20/12:59:59");        list.add("2017/09/20/12:59:59");        list.add("2017/09/20/12:59:59");        adapter = new MyAdapter();        mHandler = new Handler() {            public void handleMessage(android.os.Message msg) {                adapter.notifyDataSetChanged();                mHandler.sendEmptyMessageDelayed(1, 10);            };        };    }    private void initEvent(){        mGridView.setAdapter(adapter);        mHandler.sendEmptyMessageDelayed(1, 1);    }}

运行后即可得到上面的效果

原创粉丝点击