Android 了解完activity的基本知识,接下来了解Android intent(据说是多个activity之间的媒介)。
学习的过程自然少不了参照,我选择的参照是郭霖老师的《第一行代码Android》。
学习是个循序渐进的过程,王二不是一个天赋异禀的同学,所以只能每天多积积硅步。今天看到专访任玉刚:从菜鸟到资深工程师的进阶之路,又一个移动端的大牛登上了CSDN的首页资讯,王二我略感兴奋,这兴奋不是说我自己也想有朝一日如此(但隐隐约约有点,笑),而是心中又多了一个行进的标杆。
新建second_layout.xml。
<Button android:id="@+id/button_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="button2" />
新建SecondActivity.java
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.second_layout); }
注册activity
<activity android:name="com.mwq.activity.SecondActivity" ></activity>
在FirstActivity.java中增加显示intent
button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent); } });
首先关于隐式intent的概念,我没有很好的理解,无论是书中所说“相比于显式intent,隐式intent则含蓄得多,它并不明确指出我们想要启动哪一个活动,而指定了一系列更为抽象的action和category等信息,然后交由系统分析这个intent,并帮助我们找到合适的活动去启动”,还是 Android入门:隐式Intent文中所说
顾名思义,隐式意图就是在不明确设置激活对象的前提下寻找最匹配的组件,举个例子,比如有5个人:
(1)A:170cm
(2)B:160cm
(3)C:180cm
(4)D:190cm
(5)E:200cm
如果是显式意图的话,如果我们要指明选择A的话会说:”我选择A.“,但是如果是隐式意图,则会说:”我要选择170cm的人“,虽然没有指明要选A,但会寻找条件最匹配的人。
我都不太认可这种说法,但我此刻也没有好的说法,真是无奈。
AndroidManifest.xml中为SecondActivity增加action和category。
<activity android:name="com.mwq.activity.SecondActivity"> <intent-filter> <action android:name="com.mwq.activity.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
FirstActivity.java,把显式intent改成隐式intent。
// Intent intent = new Intent(FirstActivity.this, SecondActivity.class); Intent intent = new Intent("com.mwq.activity.ACTION_START");
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(‘javascript:void(0)‘)); startActivity(intent);
Create an intent with a given action. All other fields (data, type, class) are null. Note that the action must be in a namespace because Intents are used globally in the system – for example the system VIEW action is android.intent.action.VIEW; an application’s custom action would be something like com.google.app.myapp.CUSTOM_ACTION.
关于Intent(String)的构造方法,上面的doc说得也够仔细的。
嗨嗨,挺不错,可以打开我的博客。
请允许我再说几句题外话。前几日,我更新了自己的头像,终于可以见到王二的真面目了,只可惜,像素低了点,遗憾,以后可以再聚焦到头部一些。以前有为叫momasp的朋友,喷我用女生李孝利的头像赚取流量,我是十分的不解,我没见到自己流量上增加了多少,真是愧对了李孝利这位美女。做一个沉默的程序员都挺难了,还得被说三道四,真是难上加难,哈哈。不过呢,经过反思和自我教育,我还是决定痛改前非,使用自己真实的头像。
Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086"));
另外,还有其他的使用,可参见Android 打开地图并显示指定的经纬度,发短信,显示地理位置等等。
FirstActivity.java
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("name", "沉默王二");
SecondActivity.java
Intent intent = getIntent(); String name = intent.getStringExtra("name"); Log.d("SecondActivity", name);
方式呢,前后呼应,倒也挺好记忆的。
FirstActivity.java
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1111);
requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1111: if (resultCode == RESULT_OK) { String response = data.getStringExtra("name"); Log.d("FirstActivity", response); } break; default: break; } }
SecondActivity.java中增加对应的处理
Button button = (Button)findViewById(R.id.button_2); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.putExtra("name", "沉默王三"); setResult(RESULT_OK, intent); finish(); } });
目前学习到的intent的知识倒是不难,很容易理解,但要整理成文,的确还是花了不少时间。
笑对现实的无奈,不能后退的时候,不再傍徨的时候,永远向前 路一直都在──陈奕迅《路一直都在》
本文出自:【沉默王二的博客】
?
原文:https://blog.51cto.com/u_2324584/3244619