本来是想弄一下倒计时的,但参考了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);
}
}
运行后即可得到上面的效果