【01.05】Activity和Intent
1、多个Activity之间的关系
Activity01------>Activity02
调用Activity01.startActivity(intent)
一个Intent对象包含的信息
- Component name:区分是哪一个Activity
- Action:启动了一个Activity后,采取什么动作
- Data:一个Activity向另外一个Activity传递什么数据
- Extras:额外的变量,是一些键值对,进行交互
- Category
- Flags
例子:(例子写了三遍,各种出错 汗……)
Tips:
要想eclipse在打任何字母都提示,在windows-preferences-java-editor-content assist里有个auto activation trigger for Java,里面写上abcdefghijklmnopqrstuvwxyz.,如果大写字母也想提示,也写上一大串大写字母吧 [´・ω・`]
有些地方会提示出错,点击出错的小标签,会告诉你怎么样纠正这个错误,一般是缺少包引用或者函数名有更改(改朝换代好快[´・ω・`]
用的eclipse4.2.1
api为2.2的
有些地方和视频不太一样
1、创建一个andriod application project,系统自动生成相关文件
2、在activity_main.xml中加上一个按钮文件
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
xmlns:tools= "http://schemas.android.com/tools"
android:layout_width= "match_parent"
android:layout_height= "match_parent" >
< Button
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:id ="@+id/mybutton"
android:text ="@string/clickbutton"
/>
</ LinearLayout>
3、在MainActivity.java中对OnCreate函数进行复写
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
mybt = (Button)findViewById(R.id.mybutton);
mybt .setOnClickListener( new mybuttonClickListener()); //这是第六步做到的~
}
4、在com.example.activity03包下创建新的文件,new->class,取名为OtherActivity,生成新的文件OtherActivity.java
4.1:
在AndroidMainfest.xml中注册这个Activity
< activity
android:name =".OtherActivity"
android:label ="@string/otheractivity" ></ activity>
4.2:
需要用到的资源先创建,在Layout文件夹下创建对应的布局文件:activity_other.xml,放入一个TextView控件
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
xmlns:tools= "http://schemas.android.com/tools"
android:layout_width= "match_parent"
android:layout_height= "match_parent" >
< TextView
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:id ="@+id/mytextview"
android:text ="@string/otheractivity"
/>
</ LinearLayout>
4.3:回到OtherActivity.java,使这个类继承Activity,并复写OnCreate方法,对TextView进行操作
package com.example.activity03;
import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
public class OtherActivity extends Activity {
private TextView mytv = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_other );
mytv = (TextView)findViewById(R.id. mytextview);
mytv .setText(R.string. otheractivity);
}
}
5、两个Activity已经准备好了,接下来需要对按钮绑定一个动作,在MainActivity.java的MainActivity函数中添加如下类,创建一个Intent对象,并添加需要跳转的Activity,再从这个Activity启动跳转
class mybuttonClickListener implements android.view.View.OnClickListener{
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass( MainActivity. this, OtherActivity.class );
MainActivity. this.startActivity(intent);
}
}
6、点击动作已经准备好,接下来将这个动作绑定到按钮上
mybt .setOnClickListener( new mybuttonClickListener());
完成~启动~
例子变体:
Intent是可以添加Extra键值对的,记得么~现在要做到的是把一个键值对从MainActivity传递到OtherActivity中
其他不变,回到mybuttonClickListener类中,将一个键值对放入intent里
intent.putExtra(
"testIntent"
,
"here is the value in intent"
);
再在OtherActivity中创建一个Intent类的对象,取出这个intent
Intent intent = getIntent();
在OtherActivity的TextView中表现出这个键值
mytv
.setText(intent.getStringExtra(
"testIntent"
));
结果如下:
![](https://img-my.csdn.net/uploads/201211/25/1353834083_4318.jpg)
【01.06】常用控件
1、TextView
2、EditView
3、Button
4、Menu
还是通过例子来理解吧~
目标如图↓
![](https://img-my.csdn.net/uploads/201211/25/1353834099_9662.jpg)
1、创建一个android application project,在主框架中声明四个控件
activity_main.xml
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
>
<
EditText
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:id
=
"@+id/inputOne"
/>
<
TextView
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:id
=
"@+id/label"
android:text
=
"@string/init_word"
/>
<
EditText
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:id
=
"@+id/inputTwo"
/>
<
Button
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:id
=
"@+id/showResult"
android:text
=
"@string/result_button"
/>
</
LinearLayout
>
2、创建另外一个Activity,为ResultActivity
2.1:在包com.example.activity04中新建class,命名为ResultActivity.java
2.2:在layout文件夹中新建对应的xml资源文件,命名为result_activity.xml,并放入一个TextView控件用于显示结果
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
>
<
TextView
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:id
=
"@+id/resultLabel"
/>
</
LinearLayout
>
2.3:在ResultActivity中复写OnCreate方法,初始化Activity和TextView控件
2.4:别忘了在AndroidMainfest.xml中注册ResultActivity
3、回到MainActivity中,初始化四个控件,并创建一个监听器,复写一个菜单的回调函数
package com.example.activity04;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.*;
public class MainActivity extends Activity {
private EditText inputOne = null;
private EditText inputTwo = null;
private TextView label = null ;
private Button showResult = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
inputOne = (EditText)findViewById(R.id. inputOne);
inputTwo = (EditText)findViewById(R.id. inputTwo);
label = (TextView)findViewById(R.id. label );
showResult =(Button)findViewById(R.id. showResult);
//这个地方是视频里这样写的,但是实际上这样写却会出错ORZ
//label.setText(R.string.init_word);
//showResult.setText(R.string.result_button);
//具体原因是由于我在 xml资源文件中已经写入了相应的text引用,重复的话就会报错
//如果资源文件中控件的android:text对应的string不是以下两项则不会报错
//监听器动作绑定
showResult .setOnClickListener( new CalculateListener());
}
//复写菜单键对应方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
//参数为 菜单的组序号、对应按钮的序号、对应按钮的
menu.add(0, 1, 1, R.string. about );
menu.add(0, 2, 2, R.string. exit );
return super .onCreateOptionsMenu(menu);
}
//对应菜单-退出的方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==1){
finish();
}
return super .onOptionsItemSelected(item);
}
class CalculateListener implements android.view.View.OnClickListener{
public void onClick(View arg0) {
// TODO Auto-generated method stub
//取得两个控件的值
String s1 = inputOne .getText().toString();
String s2 = inputTwo .getText().toString();
//将值存放到Intent对象中
Intent intent = new Intent();
intent.putExtra( "one" , s1);
intent.putExtra( "two" , s2);
//设置intent的activity
intent.setClass(MainActivity. this ,ResultActivity. class );
//调用activity的启动动作
MainActivity. this .startActivity(intent);
}
}
}
4、到ResultActivity中,进行Intent对象数据的接受和计算
package com.example.activity04;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class ResultActivity extends Activity {
private TextView resultview = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super .onCreate(savedInstanceState);
setContentView(R.layout. result_activity );
//初始化 Textview
resultview = (TextView)findViewById(R.id. resultLabel);
//1、接受MainActivity中传递过来的值
Intent intent = getIntent();
String s1 = intent.getStringExtra( "one" );
String s2 = intent.getStringExtra( "two" );
int i1 = Integer.parseInt(s1);
int i2 = Integer.parseInt(s2);
//2、计算
int r = i1 * i2;
//3、显示结果(将 int转换成String~
resultview .setText(r+"" );
}
}
![](https://img-my.csdn.net/uploads/201211/25/1353834142_9328.jpg)
大概就是如上,多做几遍就熟练了[´・ω・`]