0%

Intent Open Activity

通过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" />
<!-- PS:
第一句代码,是用来指定我们的button的ID为:btn_OpenActivity
第二三句代码:用来指定我们的button宽与高(wrap_content表示与文字同高宽)
四五句:layout_alignLeft:这个表示与给定ID同左边,五类似四
@string/Open:这个主要是在我们的res/values/strings.xml这个文件中有我们给定的常量值。
-->

我们编辑完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) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_01);
}
}
/*
比较好理解,其实setContentView这个函数就是一个就是关联一个布局,这个布局的ID在我们gen/R.java这个文件中进行定义,final static定义的一个常量。
*/

我们编辑完我们的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);//packageContext上下文
startActivity(intent);
}
});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
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);//packageContext上下文
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是以栈的形式在内存中保存的,这个动脑子想一下也就知道了。