当前位置: 移动技术网 > 移动技术>移动开发>Android > 安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?

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

2018年10月28日  | 移动技术网移动技术  | 我要评论

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

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的原因。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网