zoukankan      html  css  js  c++  java
  • 安卓开发学习笔记(四):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的原因。

  • 相关阅读:
    多线程
    异常
    接口
    多态
    对象和封装
    DIV+CSS命名规范集合
    MySql 最新官方安装教程-下载
    乐嘉性格色彩-4色特性,学习感悟
    Eclipse 的常用快捷方式
    学习方法_2011年编写和锻炼的思维题
  • 原文地址:https://www.cnblogs.com/geeksongs/p/9863795.html
Copyright © 2011-2022 走看看