一步一步学android控件(之十一) —— Chronometer

今天先纠正一下前面犯的错误—— WidgetsAdapter,该文件在一步一步学android控件(之一) —— 开始篇中创建,里面出了一个很大的bug,现在才发现快哭了 。每次都是添加一个View然后点击测试后Ok就行了,结果今天突然发现点击前面的View也进入最后一个View的界面。修正后的WidgetsAdapter.java内容如下

package com.xy.zt.selfdefinewieget;

import java.util.ArrayList;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.xy.zt.selfdefinewieget.data.ViewData;

public class WidgetsAdapter extends BaseAdapter {
    private Context mContext;
    private LayoutInflater mInflater;
    ArrayList<ViewData> mLocalData = ViewData.View_Datas;

    public WidgetsAdapter(Context context) {
        if (context == null) {
            throw new IllegalArgumentException(
                    "in constructor WidgetsAdapter: context mustn't be null !");
        }
        mContext = context;
        mInflater = LayoutInflater.from(mContext);
    }

    public int getCount() {
        return mLocalData.size();
    }

    public Object getItem(int position) {
        if (position < 0 || position >= mLocalData.size())
            return null;
        return mLocalData.get(position);
    }

    public long getItemId(int position) {
        if (position < 0 || position >= mLocalData.size())
            return -1;
        return mLocalData.get(position).mViewId;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.view_list_item_layout,
                    null);
            holder = new ViewHolder();
            holder.mListItem = (TextView) convertView
                    .findViewById(R.id.item_view_name);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        String itemStr = mLocalData.get(position).mViewName;
        holder.mListItem.setText(itemStr);
        final int curPos = position;
        convertView.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {
                handleItemClicked(mLocalData.get(curPos).mViewId);
            }

        });
        return convertView;
    }

    static class ViewHolder {
        TextView mListItem;
    }

    private void handleItemClicked(int action) {
        Intent intent = new Intent();
        switch (action) {
        case ViewData.TEXT_VIEW_ID:
            intent.setClass(mContext, WidgetTextView.class);
            mContext.startActivity(intent);
            break;
        case ViewData.BUTTON_ID:
            intent.setClass(mContext, WidgetButtonActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.EDIT_TEXT_ID:
            intent.setClass(mContext, WidgetEditTextActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.AUTO_COMPLETE_TEXTVIEW_ID:
            intent.setClass(mContext, WidgetAutoCompleteActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.MULTI_AUTO_COMPLETE_TEXTVIEW_ID:
            intent.setClass(mContext, WidgetMultiAutoCompleteActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.TOAST_ID:
            intent.setClass(mContext, WidgetToastActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.IMAGE_VIEW_ID:
            intent.setClass(mContext, WidgetImageViewActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.IMAGE_BTN_ID:
            intent.setClass(mContext, WidgetImgBtnActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.GALLERY_ID:
            intent.setClass(mContext, WidgetGalleryActivity.class);
            mContext.startActivity(intent);
            break;
        case ViewData.CHRONOMETOR_ID:
            intent.setClass(mContext, ChronometerActivity.class);
            mContext.startActivity(intent);
            break;
        }
    }
}
以前使用成员变量记录position位置,仔细一看,发现改值一直是最后一个View的Position,所以出现了点击任何View都进入最后一个View的界面。


今天学习控件Chronometer。该类实现了一个简单的计时器。使用时可以指定一个基本时间elapsedRealtime()或者使用默认时基(当前时间)。Chronometer默认的显示格式为“MM:SS”或 “HH:MM:SS”,也可以通过setFormat指定样式。另外,系统还有一个Chronometer.OnChronometerTickListener系统每过一秒中会调用该Listener。下面就时间显示的Format和Listener做一个简单的使用案例,先看效果图


当前显示的是默认样式,点击使用自定义format显示时间后效果图如下:


接下来一步一步实现该功能:

1、创建当前布局文件widget_chronometer_layout.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" >


        <Button
            android:id="@+id/default_chronometer_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/default_chronometer_style" />
        <Button
            android:id="@+id/customer_chronometer_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/customer_chronometer_style" />

    <Chronometer
        android:id="@+id/show_time_chronometer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/show_time_in_second"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
2、界面显示activity——ChronometerActivity.java

package com.xy.zt.selfdefinewieget;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;
import android.widget.TextView;

public class ChronometerActivity extends Activity implements OnClickListener,
        OnChronometerTickListener {

    private Chronometer mChronometer;
    private Button mDefault;
    private Button mCustomer;
    private TextView mSecondView;
    static final String FORMAT = "customer format : %s";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.widget_chronometer_layout);
        i = 0;
        init();
    }

    void init() {
        mChronometer = (Chronometer) findViewById(R.id.show_time_chronometer);
        mChronometer.start();
        mDefault = (Button) findViewById(R.id.default_chronometer_btn);
        mDefault.setOnClickListener(this);
        mCustomer = (Button) findViewById(R.id.customer_chronometer_btn);
        mCustomer.setOnClickListener(this);
        mSecondView = (TextView) findViewById(R.id.show_time_in_second);

        mChronometer.setOnChronometerTickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.default_chronometer_btn:
            mChronometer.setFormat("%s");
            break;
        case R.id.customer_chronometer_btn:
            mChronometer.setFormat(FORMAT);
            break;
        }
    }

    public void onChronometerTick(Chronometer chronometer) {
        mSecondView.setText("time in seconds :" + (i++));
    }

    static int i = 0;
}
在未点击按钮时,显示的format为“%s”(默认样式);

点击“自定义format后”使用代码中定义的FORMAT样式;

mChronometer.setOnChronometerTickLister(this)指定了监听器,每当有一个“Tick”动作时就会回调onChronometerTick函数。


今天的主要功能已实现,下面的代码用于完成整个项目:

ViewData.java中添加如下内容:

public static final int CHRONOMETOR_ID = GALLERY_ID + 1;
    public static final String CHRONOMETER_NAME = "Chronometer";
 private static final ViewData mChronometer = new ViewData(CHRONOMETER_NAME,
            CHRONOMETOR_ID);
View_Datas.add(mChronometer);

WidgetsAdapter.java中的handlerItemClicked函数中添加如下内容:

case ViewData.CHRONOMETOR_ID:
            intent.setClass(mContext, ChronometerActivity.class);
            mContext.startActivity(intent);
            break;
Chronometer控件就学到这里,下一个控件DatePicker。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值