一个Android应用一般都包含有多个Activity,在Android中,通过Intent来实现Activity之间的导航,以下内容为笔者在自学时的理解,可能不是特别的专业,希望对你有一点帮助。在下实例中我的项目名“com.example.dell.twoactivity”,需要注意下。(要特别注意名字,不能有一点错误)
我觉的一个Activity由三个部分组成
1在AndroidMainifest.xml中有一个声明,
2有自己的布局(即.xml文件)
3有自己的构造(即.java文件)
第一步修改AndroidManifest.xml。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dell.twoactivity" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//这一部分就是新加的;
<activity
android:name=".SecondActivity"
android:label="第二个activity" >
<intent-filter>
//这儿的名字要注意;
<action android:name="com.example.dell.twoactivity.SecondActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
//
</application>
</manifest>
第二步新建一个.xml命名为activity_second.xml。
<RelativeLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
//这儿的名字要注意
tools:context="com.example.dell.twoactivity.SecondActivity">
<TextView
android:text="This is a second activity2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
第三步新建一个.java命名为SecondActivity.java。
package com.example.dell.twoactivity;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
/**
* Created by DELL on 2019/4/27.
*/
public class SecondActivity extends Activity{
public void onCreate(Bundle savedInstanceState) {
//注意这个函数默认是protect,要改为public
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
第四步在activity_main.xml 中添加一个按钮用于跳转;
<RelativeLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:text="This is a first activity 1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/aa" />
<Button
android:id="@+id/button"
android:text="跳转"
android:onClick="onClick"//这个onClick就是函数的名字,点击按钮之后调用
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/aa"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="55dp" />
</RelativeLayout>
第五步在修改MainActivity.java,写好事件函数
package com.example.dell.twoactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
public void onClick(View view)
{
startActivity(new Intent("com.example.dell.twoactivity.SecondActivity"));
}
@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();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
最后:以上这个实例只是实现了从一个activity跳转到另一个activity,但并没有结果的返回,下面将介绍带返回的activity之间的使用:
首先介绍一下基础知识;
1finish()–结束当前这个activity;
2RESULT_OK 只是一个标志;
3函数setResult(RESULT_OK, Intent对象);设置返回的结果
再上一个例子上进行的修改
第一步修改一下secondactivity.xml修改一下增加一个文本框,可以输入,传递返回值。
<LinearLayout
android:orientation="vertical"
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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.dell.twoactivity.SecondActivity">
<TextView
android:text="This is a second activity2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="44dp" />
<EditText
android:id="@+id/editext1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button1"
android:onClick="onClick"
android:text="OK"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
第二步在.java 中写事件的处理
package com.example.dell.twoactivity;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
/**
* Created by DELL on 2019/4/27.
*/
public class SecondActivity extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
public void onClick(View view)
{
Intent data = new Intent();
EditText t = (EditText) findViewById(R.id.editext1);//得到一个EditText的引用
data.setData(Uri.parse(t.getText().toString()));//把值加进去
setResult(RESULT_OK, data);//设置返回值
finish();//结束当前的activity
}
}
第三步就是在main.java中添加回调后的处理函数void onActivityResult(int requestCode, Intent data);
处理添加回调处理函数外,要设置一个flag标记,用来是被不同activity;
这里的flag就是request_code;
package com.example.dell.twoactivity;
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.widget.Toast;
public class MainActivity extends Activity {
int request_code = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view)
{
startActivityForResult(new Intent("com.example.dell.twoactivity.SecondActivity"), request_code);
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == request_code)
{
if(resultCode == RESULT_OK)
{
Toast.makeText(this, data.getData().toString(), Toast.LENGTH_SHORT).show();
}
}
}
}
在介绍完跳转,返回之后,接下来介绍的内容就是传递参数;
传递参数的核心部分是
Intent i = new Intent("com.example.dell.twoactivity.SecondActivity");//定义Intent对象
i.putExtra("str1", "你好啊");//传递key--value
i.putExtra("age1", 25);//传递key-value 值,,这就是参数
Bundle extras = new Bundle();//
extras.putString("str2", "你好2")//;
extras.putInt("age2", 35);//
i.putExtras(extras);//这儿是putExtras,多了一个s;extra也是一个参数;
startActivityForResult(i, flag);//跳转了
接受参数的核心代码:
getIntent().getStringExtra("str1").toString()
Integer.toString(getIntent().getIntExtra("age1", 0))
Bundle bundle = getIntent().getExtras();
bundle.getString("str2")
Integer.toString(bundle.getInt("age2"))
整体代码展示;
secondActivity.java
package com.example.dell.twoactivity;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
/**
* Created by DELL on 2019/4/27.
*/
public class SecondActivity extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Toast.makeText(this, getIntent().getStringExtra("str1").toString(), Toast.LENGTH_LONG).show();
Toast.makeText(this, Integer.toString(getIntent().getIntExtra("age1", 0)), Toast.LENGTH_LONG).show();
Bundle bundle = getIntent().getExtras();
Toast.makeText(this,bundle.getString("str2"),Toast.LENGTH_LONG).show();
Toast.makeText(this,Integer.toString(bundle.getInt("age2")),Toast.LENGTH_LONG).show();
}
public void onClick(View view)
{
Intent i = new Intent();
i.putExtra("age3", 45);
i.setData(Uri.parse("dfsljkll;"));
setResult(RESULT_OK, i);
finish();
}
}
activity_second.xml
<LinearLayout
android:orientation="vertical"
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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.example.dell.twoactivity.SecondActivity">
<TextView
android:text="This is a second activity2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button1"
android:onClick="onClick"
android:text="OK"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
main.java
package com.example.dell.twoactivity;
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.widget.Toast;
public class MainActivity extends Activity {
int flag = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view)
{
Intent i = new Intent("com.example.dell.twoactivity.SecondActivity");
i.putExtra("str1", "你好啊");
i.putExtra("age1", 25);
Bundle extras = new Bundle();
extras.putString("str2", "你好2");
extras.putInt("age2", 35);
i.putExtras(extras);//这儿是putExtras,多了一个s;
startActivityForResult(i, flag);
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == flag)
{
if(resultCode == RESULT_OK)
{
Toast.makeText(this, Integer.toString(data.getIntExtra("age3", 0)), Toast.LENGTH_SHORT).show();
Toast.makeText(this, data.getData().toString(), Toast.LENGTH_LONG).show();
}
}
}
}
main.xml
<LinearLayout
android:orientation="vertical"
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" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:text="This is a first activity 1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/aa" />
<Button
android:id="@+id/button"
android:text="跳转"
android:onClick="onClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/aa"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="55dp" />
</LinearLayout>
好了,完工。