安卓开发学习笔记(四):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的原因。
上一篇: 数据结构与算法基础之队列基本概念、循环队列【重点】
下一篇: python之文件读写操作笔记