欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?

程序员文章站 2022-06-16 23:40:27
一.首先检查我们的代码: 二.注册在主活动上的代码需要补上: 从中我们可以看到我们注册在XML界面上,后面的代码为,action中间 ......

一.首先检查我们的代码:

firstactivity.java(主活动程序当中的代码):
button3监听器后面的代码就是我们隐式intent的业务逻辑所在了,大家可以往下面看看,大概在代码的第57行。
 1 package com.example.lenovo.activitytest;
 2 
 3 import android.support.v7.app.appcompatactivity;
 4 import android.os.bundle;
 5 import android.view.menu;
 6 import android.view.menuitem;
 7 import android.view.view;
 8 import android.widget.button;
 9 import android.widget.toast;
10 import android.content.intent;
11 
12 public class firstactivity extends appcompatactivity {
13     @override
14     public boolean oncreateoptionsmenu(menu menu) {
15        getmenuinflater().inflate(r.menu.main,menu);//第一个参数表示我们通过哪一个资源来引用菜单当中的全部资源
16         // 第二个参数表示菜单被添加到哪一个对象当中
17        return true;//这句话表示我们创建的菜单是可以显示出来的,但是仅仅显示还是不够的,还需要真正地让菜单上的选项起作用。
18     }
19     @override
20     public boolean onoptionsitemselected(menuitem item)//这里定义菜单为一个响应式事件
21     {
22         switch (item.getitemid())
23         {
24             case(r.id.add_item):
25 
26                 toast.maketext(this,"你选择了增加",toast.length_short).show();
27                 break;
28             case(r.id.remove_item):
29                 toast.maketext(this,"你选择了减少",toast.length_short).show();
30                 break;
31                 default://这个关键字是可以不要的
32         }
33         return true;//将菜单当中的显示出来
34     }
35     @override
36     protected void oncreate(bundle savedinstancestate) {
37         super.oncreate(savedinstancestate);
38         setcontentview(r.layout.first_layout);
39         button button1=(button)findviewbyid(r.id.button_1);
40         button1.setonclicklistener(new view.onclicklistener() {
41             @override
42             public void onclick(view v) {
43                 toast toast=toast.maketext(firstactivity.this,null,toast.length_short);
44                 toast.settext("只有傻逼才会按这个按钮");
45                 toast.show();//利用这种方法就可以去掉前面的app名称了,而且这种创建对象的方法也更可以令人理解
46             }
47         });
48         button button2=(button)findviewbyid(r.id.button_2);
49         button2.setonclicklistener(new view.onclicklistener() {
50             @override
51             public void onclick(view v) {
52                 toast.maketext(firstactivity.this,"只有不学习的人才会按这个按钮",
53                         toast.length_short).show();
54             }
55         });
56         button button4=(button)findviewbyid(r.id.button_4);
57         button4.setonclicklistener(new view.onclicklistener() {
58             @override
59             public void onclick(view v) {
60                /*intent intent=new intent(firstactivity.this,secondactivity.class);
61                startactivity(intent);
62                我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明
63                *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。
64                 intent intent=new intent("com.example.lenovo.activitytest.action_start");
65                 startactivity(intent);
66             }
67         });
68         button button3=(button)findviewbyid(r.id.button_3);
69         button3.setonclicklistener(new view.onclicklistener() {
70             @override
71             public void onclick(view v) {
72                intent intent=new intent(firstactivity.this,secondactivity.class);
73                startactivity(intent);
74             }
75         });
76 
77 
78 
79     }
80 
81 }

二.注册在主活动上的代码需要补上:

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.lenovo.activitytest">
 4 
 5     <application
 6         android:allowbackup="true"
 7         android:icon="@mipmap/ic_launcher"
 8         android:label="@string/app_name"
 9         android:roundicon="@mipmap/ic_launcher_round"
10         android:supportsrtl="true"
11         android:theme="@style/apptheme">
12         <activity
13             android:name=".firstactivity"
14             android:label="这是一个让人感到好笑的app">
15             <intent-filter>
16                 <action android:name="android.intent.action.main" />
17 
18                 <category android:name="android.intent.category.launcher" />
19             </intent-filter>
20         </activity>
21         <activity android:name=".secondactivity"
22             android:label="这是一个严肃的app">
23             <intent-filter><!-- 这里是一个隐式的intent申明-->
24                 <action android:name="com.example.lenovo.activitytest.action_start"/>
25                     <category android:name="android.intent.category.default"/>
26                 <category android:name="com.example.lenovo.activitytest.my_category"/>
27             </intent-filter>
28         </activity>
29     </application>
30 
31 </manifest>

 

从中我们可以看到我们注册在xml界面上,<intent-filter>后面的代码为<action android:name="com.example.lenovo.activitytest.action_start"/>,action中间name的名称一定要注意。这个里面的名称是不能够乱写的,这里名称将会和刚刚前面主活动当中的代码相呼应:

 1         button button4=(button)findviewbyid(r.id.button_4);
 2         button4.setonclicklistener(new view.onclicklistener() {
 3             @override
 4             public void onclick(view v) {
 5                /*intent intent=new intent(firstactivity.this,secondactivity.class);
 6                startactivity(intent);
 7                我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明
 8                *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。
 9                 intent intent=new intent("com.example.lenovo.activitytest.action_start");
10                 startactivity(intent);
11             }
12         });

因此我们可以看到,里面的字符串均是com.example.lenovo.activitytest,不能够乱写。这行字符串是怎么得到的呢?我们可以在主活动当中的第一行代码当中可以找到其代码为:package com.example.lenovo.activitytest。这样的话,才可以进行正确地调用主活动当中的方法,实现隐式intent跳转。如果在xml当中仅仅写上:com.example.lenovo.activitytest.action_start的话,这个活动在app进行运行的时候就不会实现正常的跳转,从而销毁活动,造成失灵。这就是我们android stuidio无法实现隐式intent的原因。