Java转Android:第5天 用Activity和Intent实现小通讯录

81 篇文章 1 订阅
79 篇文章 0 订阅
本文深入探讨了Android开发中的Activity生命周期及其应用场景,解析了从创建到销毁的关键状态,并通过实例展示了如何利用Intent进行Activity间的跳转和数据传递。此外,还介绍了如何在生命周期方法中处理异常情况,以及如何构建简单通讯录应用,演示了拨号功能的实现。文章适合有一定编程基础,希望拓宽知识面的开发者阅读。
摘要由CSDN通过智能技术生成

一、我讲

今天,我主要讲,第一:Activity的生命周期,应用场景;第二:Intent的用途,利用它实现Activity之间的传值跳转。

1.1 窗体 Activity

对于Activity我们已经不陌生了,前面几期都用到了,我是这么解释的:

新建的项目,layout文件夹下的xml管视图,java文件下的Activity管逻辑。

Activity的代码就像下面这样:

public class MainActivity extends Activity {
    ……
    @Override
    protected void onResume() {
      super.onResume();
    }
    ……
}

其实,它的本质是提供一个屏幕,并处理用户和此屏幕的交互。
有时候,你使用App时,一个页面跳到另一个页面,有可能就是一个Activity跳到另一个Activity。

生命周期

生命周期是一个枯燥的理论,但是在项目实战中却很有用。生命周期是面试必问的话题之一,一些工作两三年的应聘者,会嫌问的刁钻,他们说实际做项目根本用不到。相反,5年以上安卓开发,对这个问题却能很好地回答。

生命周期,可以通俗地理解为“从摇篮到坟墓”的整个过程。

Activity也是有生命周期的。相信大家都看到过这个图,这是安卓官方文档的一张图。

我总结成下面这个图,80%的精华都在这6个函数上。

我们重点关注Activity什么时候创建销毁、可见不可见、能不能开始交互。有时候虽然界面可见,但是你没法和界面交互(比如一个Dialog风格的Activity_B覆盖在Activity_A上面,虽然你能看见A,但是无法点击,此时A处于生命周期的onPause。如果一个AlertDialog对话框在Activity_A上弹出,虽然A也是可见不可交互,但是并不执行onPause方法)。

写程序更多的是处理异常情况,Activity生命周期的应用场景,多数也是用在一些异常情况上。

了解什么时候处于什么状态,这一点非常关键。

看下面这个小例子,非常能说明问题:

  • 当第一次打开Activity,它提示:初次见面,多多关照。
  • 当你准备要切换到其他程序时,它提示:等您回来。
  • 当你后悔了,不切了,它提示:继续为您服务。
  • 当你狠心退出,它又提示:再见,再见。

你敢说,你的App不会被用户这么操作吗?你能不关注这些操作对你正向流程的冲击吗?

1.2 意图 Intent

它负责对应用中一次操作的动作及数据进行描述,Android则根据此Intent的描述,找到对应的组件,完成调用。

一句话解释就是:你要去找谁(目标组件,比如Activity)?带着什么礼物(动作、描述)?

上面那个图,如果Activity-1想要启动Activity-2,那么就可以通过Intent。

跳转指定Activity

Intent通过如下方式实现两个Activity之间的传值跳转。

跳转指定意图

除了跳转到明确的Activity,Intent也支持隐式跳转,比如它说我要打电话,发短信,系统就会分配到对应的跳转目标。

// 调用系统打电话
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:12345"));
startActivity(intent);

// 调用系统发短信
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:12345"));
startActivity(intent);

二、你做

下面,我们要做这么一个功能,类似于通讯录:
第一个页面是联系人主页面MainActivity,上面只展示一个张三。点击张三,携带着张三的姓名和电话,跳转到第二个详情页面DetailActivity,第二个页面有个拨号按钮,点击调到系统的拨号盘。

首先,我们先写MainActivity的布局文件activity_main.xml,上面只有一个按钮。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="张三"
        android:onClick="toDetail"
        />
</android.support.constraint.ConstraintLayout>

注意啦,注意啦,上面的TextView有一个属性onClick=“toDetail”,另外ConstraintLayout还有一个属性context=“.MainActivity”,这代表TextView有一个叫toDetail的点击事件在MainActivity中。这种方式可以替代textView.setOnClickListenner设置按钮事件

下面就可以看到MainActivity里有一个toDetail(View view)方法,正好对应xml里的设置。在这个方法里,我们看到,它采用Intent进行传值跳转。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void toDetail(View view) {

        Intent intent = new Intent(this, DetailActivity.class);
        intent.putExtra("name","张三");
        intent.putExtra("phone","666666");
        startActivity(intent);
    }
}

下面是跳转进入的详情页DetailActivity的布局activity_detail.xml,里面是2个文本,一个拨号按钮,同样,拨号按钮也采用了android:onClick="call"的定义模式。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    tools:context=".DetailActivity">
    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="张三"/>
    <TextView
        android:id="@+id/phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1234567898" />
    <Button
        android:id="@+id/call"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="拨号"
        android:onClick="call" />
</android.support.constraint.ConstraintLayout>

下面是详情页DetailActivity的逻辑代码:

public class DetailActivity extends AppCompatActivity {

    String sPhone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        
        TextView name = findViewById(R.id.name);
        TextView phone = findViewById(R.id.phone);
        
        Intent intent = getIntent();
        String sName = intent.getStringExtra("name");
        sPhone = intent.getStringExtra("phone");
        name.setText(sName);
        phone.setText(sPhone);
    }

    public void call(View view) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_DIAL);
        intent.setData(Uri.parse("tel:"+sPhone));
        startActivity(intent);
    }
}

首先使用getIntent()获取上游传来的信息,然后把数值给文本控件显示出来。当点击拨号按钮时,采用隐示意图,进行拨号盘的调用。
至此,我们的小程序就完成了。
其实,这挺有用的,可以为老年人的安卓手机写一个极其简单的通讯录,只有几个固定联系人,点击头像就去拨号。现在系统的通讯录虽然功能强大,但是层级很多,是一个通用的功能。
我们掌握了这个方法,就可以做出个性化定制功能,我想这也是学技术的意义所在。

三、关于

现在,行业内多是Android转Java,很少有Java转Android的。
但是,这并不妨碍Java同学了解Android开发,从学习的角度去拓宽自己的知识面。
所以,我会以最精简的语言来编写一个系列教程《Java转Android》(第一季30篇,日更)。
其实,不管是Java还是python,只要有编程基础的同学,一天看800字,30天可入门安卓。

作者:TF男孩
链接:https://juejin.cn/post/7128180881444847647

更多学习资料&视频笔记可点击下方卡片查看获取方式!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值