用Intent链接多个Activity

一个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>

好了,完工。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值