经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
安卓开发学习笔记(四):Android Stuidio无法实现隐式Intent是为什么?
来源:cnblogs  作者:Geeksongs  时间:2018/10/29 9:49:49  对本文有异议

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

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

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

 

  1. 1 <?xml version="1.0" encoding="utf-8"?>
  2. 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. 3 package="com.example.lenovo.activitytest">
  4. 4
  5. 5 <application
  6. 6 android:allowBackup="true"
  7. 7 android:icon="@mipmap/ic_launcher"
  8. 8 android:label="@string/app_name"
  9. 9 android:roundIcon="@mipmap/ic_launcher_round"
  10. 10 android:supportsRtl="true"
  11. 11 android:theme="@style/AppTheme">
  12. 12 <activity
  13. 13 android:name=".FirstActivity"
  14. 14 android:label="这是一个让人感到好笑的APP">
  15. 15 <intent-filter>
  16. 16 <action android:name="android.intent.action.MAIN" />
  17. 17
  18. 18 <category android:name="android.intent.category.LAUNCHER" />
  19. 19 </intent-filter>
  20. 20 </activity>
  21. 21 <activity android:name=".SecondActivity"
  22. 22 android:label="这是一个严肃的APP">
  23. 23 <intent-filter><!-- 这里是一个隐式的intent申明-->
  24. 24 <action android:name="com.example.lenovo.activitytest.ACTION_START"/>
  25. 25 <category android:name="android.intent.category.DEFAULT"/>
  26. 26 <category android:name="com.example.lenovo.activitytest.MY_CATEGORY"/>
  27. 27 </intent-filter>
  28. 28 </activity>
  29. 29 </application>
  30. 30
  31. 31 </manifest>

 

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

  1. 1 Button button4=(Button)findViewById(R.id.button_4);
  2. 2 button4.setOnClickListener(new View.OnClickListener() {
  3. 3 @Override
  4. 4 public void onClick(View v) {
  5. 5 /*Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
  6. 6 startActivity(intent);
  7. 7 我们这里已经使用了显示intent,现在开始进行隐式intent的使用,首先应该在xml当中进申明
  8. 8 *///这就是所谓的显示intent了,相对于来说这已经是十分容易实现的了。
  9. 9 Intent intent=new Intent("com.example.lenovo.activitytest.ACTION_START");
  10. 10 startActivity(intent);
  11. 11 }
  12. 12 });

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

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号