安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?
一.首先检查我们的代码:
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的原因。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
MPAndroidChart 教程:开始 Getting Started
入门 本章介绍使用此库的基本设置。 添加依赖 首先,将此库的依赖项添加到项目中。如何执行此操作在此存储库的用法部分中进行了描述。Gradle是使用此库作为依赖项的推荐方法。 创建视图 要使用LineChart, BarChart, ScatterChart, CandleStickChart, PieChart, BubbleChart or RadarChart,请在.xml中定义它: <com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="match_parent" /> 然后从您的Activity,Fragment或其他内容中检索它: // in this example, a LineChart is initialized from xml LineChart chart = (LineChart) findViewById(R.id.chart); 或者在代码中...
-
下一篇
Android 分享微信小程序失败二三事
小菜这两天接入分享微信小程序的入口,本来很简单的几行代码,可最后搞得我头昏脑胀。微信小程序官网上的接入方式已经说的非常清楚,可在小菜自己实践的过程中,却始终不成功。其实真的很简单,而卡住了还真的是很头疼,因此特意记录一下。 集成方式 build.gradle 中添加 compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'; 在需要调用分享功能的入口添加如下代码,如果配置参数都正常的话基本就可以正常分享了: public void shareToMiniWX() { WXMiniProgramObject miniProgramObj = new WXMiniProgramObject(); miniProgramObj.webpageUrl = "http://www.qq.com"; // 兼容低版本的网页链接 miniProgramObj.miniprogramType = WXMiniProgramObject.MINIPTOGRAM_TYPE_RELEASE;// 正式版:0,测试版:1,体验版:2 mini...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL数据库在高并发下的优化方案
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能