Android开发之简易倒计时器(Intent)

作者: 没想好昵称呵 | 来源:发表于2018-12-07 15:15 被阅读12次

    我想在一个活动中启动另一个活动怎么做?

    • 开篇抛出这个问题,因为我们在日常使用app总会遇到如下场景:在QQ中点开一个文件,选择用其他应用打开,然后系统弹框,提示是使用QQ浏览器打开还是用WPS打开(假设我们下载了WPS)?如下:


      用何种方式打开
    • 那我们如何解决这个问题呢,也就是在多个活动之间穿梭。毫无疑问,我们需要Intent这个类。

    Intent

    • 当我们想要启动一个Activity时,调用startActivity()方法。启动一个Activity有两种方法:
    1. 显式启动:需要指定准备启动的Activity。
    2. 隐式启动:隐式启动不需要指定特定的Activity,只需要指定Intent指定对应的category(类别)、action(动作)、data(数据)即可,具体启动哪一个Activity由系统和用户共同来决定。启动的Activity可以是系统中自带的,也可以是已安装的第三方程序中的Activity。
    • 显式启动的方式:
    Intent intent = new Intent(A.this,B.class);//A代表主活动,B代表要启动的活动
    StartActivity(intent);//跳转到第二个活动
    
    • 隐式启动的方式:
    Intent it = new Intent(Intent.ACTION_DIAL);//.ACTION_DIAL指明启动动作
    it.setData(Uri.parse(“tel:13550093021”));//调用setData()方法,设置数据
    StartActivity(it);//启动并跳转到第二个活动
    
    补充:
    1. ACTION_DIAL显示打电话面板。
    2. 通过Uri.parse()方法将电话号码解析成一个Uri对象,再通过setData()方法将这个Uri对象传进去。
    • 接下来介绍如何利用显式启动来开发一个简易倒计时器。

    实现简易倒计时器

    • 准备完成的功能:
    1. 设置一个主活动,主活动中提供用户输入倒计时的具体数值,点击倒计时按钮,页面跳转到第二个活动。
    2. 在一个Button控件中显示倒计时的具体过程。
    • 编写设置倒计时的页面,显示效果如下,代码在最后给出。


      设置倒计时数数值
    • 编写主活动页面,将在EditText控件里面获取的数值通过Intent的putExtra()方法传递到第二个活动中。代码如下:
    public class MainActivity extends AppCompatActivity {
        Button button;
        EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            editText = (EditText)findViewById(R.id.edit1);
            button = (Button)findViewById(R.id.button1);
        }
    
        public void Start(View view) {
            String data = editText.getText().toString();
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            intent.putExtra("extra_data", data);
            startActivity(intent);
        }
    }
    
    补充:
    1. public void Start(View view)是点击按钮后要实现的操作。在创建Intent对象后,通过putExtra()方法传递数据,其方法接收两个参数,第一个是键,第二个才是要传递的参数。
    • 既然传递了数据,我们就要接收数据,并实现倒计时的方法。代码如下:
    public class SecondActivity extends AppCompatActivity {
        Button button;
        TextView textView;
        Integer integer = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            Intent intent = getIntent();
            String data = intent.getStringExtra("extra_data");
            long num = (long) integer.parseInt(data);
            textView = (TextView)findViewById(R.id.sectext1);
            button = (Button)findViewById(R.id.secbutton1);
    
            CountDownTimer timer = new CountDownTimer(num * 1000, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                    button.setText("还剩" + millisUntilFinished / 1000 + "秒");
                }
    
                @Override
                public void onFinish() {
                    button.setText("倒计时完毕");
                }
            };
            timer.start();
        }
    
    补充:
    1. Intent intent = getIntent()这里使用getIntent()方法检索此Item中包含的原始Intent,并将此Intent赋值给一个intent变量。
    2. String data = intent.getStringExtra("extra_data")getStringExtra()方法传入第一个活动中定义的键,获得相应的数据并存放到data变量中。
    3. long num = (long) integer.parseInt(data)因为后面要使用的数据类型是long型,但我们这里传递进来的数据类型的String型,所以我们使用Integer类中parseInt()方法将data转换为Int型再强制转换成long型。
    4. CountDownTimer timer = new CountDownTimer(num * 1000, 1000)这里我们使用了CountDownTimer这个类来实现倒计时的功能。括号里第一个参数传入倒计时的总时间(毫秒为单位,所以我们需要乘以1000化为秒);第二个参数传入每次减去的时间(毫秒为单位,这里每次减去1s)。
    5. public void onTick(long millisUntilFinished)此函数的功能从传入参数的英文意思可知,传入倒计时结束的总毫秒数。然后调用button.setText()方法将倒计时提示传到按钮框中。
    6. public void onFinish()倒计时结束后执行此方法,在按钮控件中显示倒计时完毕提示。
    7. timer.start()只有调用了start()方法,倒计时的功能才能实现。
    • 第二个活动的布局代码后面给出。

    实际效果

    • 主活动,输入倒计时数值


      倒计时设置页面
    • 点击第一个活动按钮跳转到倒计时具体页面


      倒计时

    GitHub地址

    相关文章

      网友评论

        本文标题:Android开发之简易倒计时器(Intent)

        本文链接:https://www.haomeiwen.com/subject/fstoqqtx.html