通过Intent打开Activity Intent 官方解释: [^Intent]:Intent(意图)主要是解决Android应用的各项组件之间的通讯。 Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给被调用的组件,并完成组件的调用。 因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
简单的说,这个东西通俗的将其实就是一个媒介,通过在他里面放东西,然后做一些事情(目前我的层面是这么理解)。
Activity 这个东西就类似是一个界面,用于和用户进行界面交互。
通过Intent打开一个Activity 我们经常会有这样子的需求,就是说我们需要在这个页面通过一个按钮打开另外的一个页面,那么我们就可以这个样子进行操作。 首先我们用eclipse创建一个安卓项目,自带一个Activity,然后我们编辑:res/layout下生成的xml文件,我们添加一个button,布局什么的这些测试的过程中不是很重要。
1 2 3 4 5 6 7 8 9 10 11 12 13 <Button android:id ="@+id/btn_OpenActivity" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:layout_alignLeft ="@+id/textView1" android:layout_below ="@+id/textView1" android:text ="@string/Open" />
我们编辑完Activity.xml之后我们再添加一个布局,这个就是我们通过Intent打开的一个界面,编辑的话呢,也不是很重要,参考上面就好。
然后我们在 AndroidManifest.xml 文件中的加上Activity一个节点:<activity android:name=".activity"></activity>
,这个就有点类似于声明一个Activity。
编辑完之后我们新建一个类,这个类是我们的第二个界面,这个类要继承于Activity这个类,表明他是一个窗口,我们重载onCreate
这个函数用来添加我们的上下文对象(注意这里与Win32有点类似,Win32称之为DC,但是我Java称之为Layout),具体代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package com.example.lx;import android.app.Activity;import android.os.Bundle;public class activity extends Activity { @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_01); } }
我们编辑完我们的Activity打开页面之后,我们来编辑我们的初始界面,这个界面我们使用下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package com.example.lx;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity { private Button btn_test; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_test = (Button) findViewById(R.id.btn_OpenActivity); btn_test.setOnClickListener(new OnClickListener() { @Override public void onClick (View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this , activity.class ) ; startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu (Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true ; } @Override public boolean onOptionsItemSelected (MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true ; } return super .onOptionsItemSelected(item); } }
大部分不是太重要,关键的就是我们的看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 private Button btn_test; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_test = (Button) findViewById(R.id.btn_OpenActivity); btn_test.setOnClickListener(new OnClickListener() { @Override public void onClick (View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this , activity.class ) ; startActivity(intent); } }); }
这一段代码使我们的关键,首先我定义了一个private权限的button,然后我们用findviewById
这个函数进行关联,还是用到了R文件下的全局ID,然后进行了强制转换,关联之后我们设置一个监听器,new一个就好,不要用this那种方法,反正我不是很喜欢,那种写法让我想起了Win32繁杂的switch case语句,很烦的,题外话。然后我们在那个消息器中new一个Intent,然后将我们的Intent设置一下Class,setClass这个方法其实我也不是很明白,但是看样子就是讲我们的一个上下文对象关联到一个类上面,网上看了一下介绍:
intent.setClass(目前的acitivy.this, 目标activity.class); 应该就是这个样子的一个意思,然后我们startActivity就可以了。最后的效果: 记录一下东西,Ctrl+shift+/这个就可以进行快速注释,Alt+/就可以快速联想。 扩展:match_parent:是layout_width和layout_height的属性值之一,表示和父组件一样的长度。 这些Activity是以栈的形式在内存中保存的,这个动脑子想一下也就知道了。