初识Android01

一.不同activity之间的切换

1.方式一:显示

MainActiity

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent1 = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent1);
            }
        });

    }
}

SecondActivity

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                        Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
                       startActivity(intent1);
            }
        });

    }
}

2.方式二:隐式

隐式方式一:在intent-filter中指定category为default的category

  • 在AndroidManifest.xml中做以下修改,添加代码如下
  • MainActivity和SecondActivity的代码
    MainActivity
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //显式定义intent1
//                Intent intent1 = new Intent(MainActivity.this,SecondActivity.class);
//                startActivity(intent1);
                //隐式定义方式一
                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
                startActivity(intent2);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this,"enter the SecondActivity",Toast.LENGTH_LONG).show();

            }
        });

    }
}

SecondActivity

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //显式定义intent1
//                Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
//                startActivity(intent1);
                //隐式定义方法一
                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
                startActivity(intent2);
                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();
            }
        });

    }
}

二.使用消息弹窗Toast

可以使用Toast将一些短小的信息通知用户,这些信息会在一段时间后消失,并且不会占用任何屏幕空间
MainActivity

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //定义intent1
                Intent intent1 = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent1);
                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this,"enter the SecondActivity",Toast.LENGTH_LONG).show();

            }
        });

    }
}

SecondActivity

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //定义intent1
                Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent1);
                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();
            }
        });

    }
}

三.在Activity中使用菜单

  • 1.res目录下新建一个menu文件夹,右击res目录→New→Folder,输入文件夹名menu,点击Finish。
    接着在这个文件夹下再新建一个名叫main的菜单文件,右击menu文件夹→New→Android XML File。如图
  • 2.在main.xml中做出一下代码,【可以直接拖动菜单,会自动生成该代码的】
<item android:title="add_Item"
    android:id="@+id/add_Item_id" />
 <item android:title="remove_Item"
    android:id="@+id/remove_Item_id" />

如图

  • 3.在使用菜单的activity页面增加代码
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();
            }
        });
    }


    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }
}

四.activity之间的消息传递

1.向下一个activity传递消息

本例是在MainActivity中传递消息给SecondActivity
MainActivity的代码

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();

        //向SecondActivity传递数据
                //使用putExtra()将数据传入intent
                String data = "Hello SecondActivity";
                Intent intent4 = new Intent(MainActivity.this,SecondActivity.class);
                intent4.putExtra("extra_data",data);
                startActivity(intent4);
            }
        });
    }


    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }
}

SecondActivity的代码

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent1);

                //隐式定义方法一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();

                //接收来自MainActivity的消息
                Intent intent4 = getIntent();  //使用getIntent()获得MainActivity传递来的intent
                String data = intent4.getStringExtra("extra_data");
                Log.d("SecondActivity",data);

            }
        });

    }
}

2.返回消息给上一个activity

MainActivity的代码

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();

        //向SecondActivity传递数据
                //使用putExtra()将数据传入intent
                String data = "Hello SecondActivity";
                Intent intent4 = new Intent(MainActivity.this,SecondActivity.class);
                intent4.putExtra("extra_data",data);
                //startActivity(intent4);
                /*
                    不采用startActivity(),而采用startActivityForResult(intent, 1)。
                    其中,1为requestCode,用于之后判断是不是自己发送出去的intent
                 */
                startActivityForResult(intent4,1);
            }
        });
    }
    /*
        SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,
        因此我们需要在FirstActivity中重写这个方法来得到返回的数据
     */

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case 1:
                if (resultCode == RESULT_OK){
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("MainActivity",returnedData);
                }
                break;
            default:
        }
    }

    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }
}

SecondActivity的代码

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent1);

                //隐式定义方法一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();

                //接收来自MainActivity的消息
                Intent intent4 = getIntent();  //使用getIntent()获得MainActivity传递来的intent
                String data = intent4.getStringExtra("extra_data");
                Log.d("SecondActivity",data);
                
                //在命令按钮button被点击时返回MainActivity并带回数据
                Intent intent5 = new Intent(); //建立新的intent
                intent5.putExtra("data_return","Hello MainActivity");//将data用intent.putExtra()放入intent,
                setResult(RESULT_OK,intent5);//setResult(RESULT_OK, intent)放置result
                finish(); //销毁当前的Activity
            }
        });

    }
}

五.activity的四种启动模式

1.模式一:standard【默认】

Mainactivity的代码

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();

        //向SecondActivity传递数据
                //使用putExtra()将数据传入intent
//                String data = "Hello SecondActivity";
//                Intent intent4 = new Intent(MainActivity.this,SecondActivity.class);
//                intent4.putExtra("extra_data",data);
//                //startActivity(intent4);
//                /*
//                    不采用startActivity(),而采用startActivityForResult(intent, 1)。
//                    其中,1为requestCode,用于之后判断是不是自己发送出去的intent
//                 */
//                startActivityForResult(intent4,1);

                //activity启动模式一:standard
                Log.d("MainActivity",this.toString());
                Intent intent6 = new Intent(MainActivity.this,MainActivity.class);//自己启动自己
                startActivity(intent6);

            }
        });
    }
    /*
        SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,
        因此我们需要在FirstActivity中重写这个方法来得到返回的数据
     */

//    @Override
//    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        switch (requestCode){
//            case 1:
//                if (resultCode == RESULT_OK){
//                    String returnedData = data.getStringExtra("data_return");
//                    Log.d("MainActivity",returnedData);
//                }
//                break;
//            default:
//        }
//    }

    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }
}

2.

模式二:singleTop
在该模式下,如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity。
但是假如该activity是存在的,只是没有存在于栈顶,那么它也一样会重新创建一个

  • 在AndroidManifest.xml将要做更改的activity的启动模式设定为android:launchMode="singleTop"
  • MainActivity
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();

        //向SecondActivity传递数据
                //使用putExtra()将数据传入intent
//                String data = "Hello SecondActivity";
//                Intent intent4 = new Intent(MainActivity.this,SecondActivity.class);
//                intent4.putExtra("extra_data",data);
//                //startActivity(intent4);
//                /*
//                    不采用startActivity(),而采用startActivityForResult(intent, 1)。
//                    其中,1为requestCode,用于之后判断是不是自己发送出去的intent
//                 */
//                startActivityForResult(intent4,1);

                //activity启动模式一:standard
//                Log.d("MainActivity",this.toString());
//                Intent intent6 = new Intent(MainActivity.this,MainActivity.class);//自己启动自己
//                startActivity(intent6);

                //activity启动模式二:singleTop
                Log.d("MainActivity",this.toString());
                Intent intent7 = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent7);

            }
        });
    }
    /*
        SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,
        因此我们需要在FirstActivity中重写这个方法来得到返回的数据
     */

//    @Override
//    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        switch (requestCode){
//            case 1:
//                if (resultCode == RESULT_OK){
//                    String returnedData = data.getStringExtra("data_return");
//                    Log.d("MainActivity",returnedData);
//                }
//                break;
//            default:
//        }
//    }

    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }
}

  • SecondActivity
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent1);

                //隐式定义方法一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();

                //接收来自MainActivity的消息
//                Intent intent4 = getIntent();  //使用getIntent()获得MainActivity传递来的intent
//                String data = intent4.getStringExtra("extra_data");
//                Log.d("SecondActivity",data);
//
//                //在命令按钮button被点击时返回MainActivity并带回数据
//                Intent intent5 = new Intent(); //建立新的intent
//                intent5.putExtra("data_return","Hello MainActivity");//将data用intent.putExtra()放入intent,
//                setResult(RESULT_OK,intent5);//setResult(RESULT_OK, intent)放置result
//                finish(); //销毁当前的Activity

                //activity启动模式二:singleTop
                Log.d("SecondActivity",this.toString());
                Intent intent7 = new Intent(SecondActivity.this,ThirdActivity.class);
                startActivity(intent7);
            }
        });

    }
}

  • ThirdActivity

3.activity启动模式三:singleTask

与singleTop模式相似,只不过singleTop模式是只是针对栈顶的元素,而singleTask模式下,如果task栈内存在目标Activity实例,则:

  1. 将task内的对应Activity实例之上的所有Activity弹出栈。
  2. 将对应Activity置于栈顶,获得焦点

如果没有发现这个activity的存在,那么久创建一个新的

  • 在androidManifest.xml做出更改
  • MainActivity

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();

        //向SecondActivity传递数据
                //使用putExtra()将数据传入intent
//                String data = "Hello SecondActivity";
//                Intent intent4 = new Intent(MainActivity.this,SecondActivity.class);
//                intent4.putExtra("extra_data",data);
//                //startActivity(intent4);
//                /*
//                    不采用startActivity(),而采用startActivityForResult(intent, 1)。
//                    其中,1为requestCode,用于之后判断是不是自己发送出去的intent
//                 */
//                startActivityForResult(intent4,1);

                //activity启动模式一:standard
//                Log.d("MainActivity",this.toString());
//                Intent intent6 = new Intent(MainActivity.this,MainActivity.class);//自己启动自己
//                startActivity(intent6);

                //activity启动模式二:singleTop
//                Log.d("MainActivity",this.toString());
//                Intent intent7 = new Intent(MainActivity.this,SecondActivity.class);
//                startActivity(intent7);

                //activity启动模式三:singleTask
                Log.d("MainActivity","Task id is"+getTaskId());

            }
        });
    }
    /*
        SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,
        因此我们需要在FirstActivity中重写这个方法来得到返回的数据
     */

//    @Override
//    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        switch (requestCode){
//            case 1:
//                if (resultCode == RESULT_OK){
//                    String returnedData = data.getStringExtra("data_return");
//                    Log.d("MainActivity",returnedData);
//                }
//                break;
//            default:
//        }
//    }

    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }

    //activity启动模式三:singleTask
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("MainActivity","onRestart");
    }
}

  • SecondActivity
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent1);

                //隐式定义方法一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();

                //接收来自MainActivity的消息
//                Intent intent4 = getIntent();  //使用getIntent()获得MainActivity传递来的intent
//                String data = intent4.getStringExtra("extra_data");
//                Log.d("SecondActivity",data);
//
//                //在命令按钮button被点击时返回MainActivity并带回数据
//                Intent intent5 = new Intent(); //建立新的intent
//                intent5.putExtra("data_return","Hello MainActivity");//将data用intent.putExtra()放入intent,
//                setResult(RESULT_OK,intent5);//setResult(RESULT_OK, intent)放置result
//                finish(); //销毁当前的Activity

                //activity启动模式二:singleTop
//                Log.d("SecondActivity",this.toString());
//                Intent intent7 = new Intent(SecondActivity.this,ThirdActivity.class);
//                startActivity(intent7);

                //activity启动模式三:singleTask
                Log.d("SecondActivity","Task id is"+getTaskId());
            }
        });

    }
//activity启动模式三:singleTask
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("SecondActivity","onDestroy");
    }
}

  • ThirdActivity

4.activity启动模式四:singleInstance

在该模式下,我们会为目标Activity分配一个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得焦点。
新的Task有且只有这一个Activity实例。
如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒(对应Task设为Foreground状态)

  • 在androidManifest.xml做出如下修改
  • MainActivity
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();

        //向SecondActivity传递数据
                //使用putExtra()将数据传入intent
//                String data = "Hello SecondActivity";
//                Intent intent4 = new Intent(MainActivity.this,SecondActivity.class);
//                intent4.putExtra("extra_data",data);
//                //startActivity(intent4);
//                /*
//                    不采用startActivity(),而采用startActivityForResult(intent, 1)。
//                    其中,1为requestCode,用于之后判断是不是自己发送出去的intent
//                 */
//                startActivityForResult(intent4,1);

                //activity启动模式一:standard
//                Log.d("MainActivity",this.toString());
//                Intent intent6 = new Intent(MainActivity.this,MainActivity.class);//自己启动自己
//                startActivity(intent6);

                //activity启动模式二:singleTop
//                Log.d("MainActivity",this.toString());
//                Intent intent7 = new Intent(MainActivity.this,SecondActivity.class);
//                startActivity(intent7);

                //activity启动模式三:singleTask
//                Log.d("MainActivity","Task id is"+getTaskId());

                //activity启动模式四:singleInstance
                Log.d("MainActivity","Task id is"+getTaskId());
                Intent intent8 = new Intent(MainActivity.this,SecondActivity.class);
                startActivity(intent8);

            }
        });
    }
    /*
        SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,
        因此我们需要在FirstActivity中重写这个方法来得到返回的数据
     */

//    @Override
//    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        switch (requestCode){
//            case 1:
//                if (resultCode == RESULT_OK){
//                    String returnedData = data.getStringExtra("data_return");
//                    Log.d("MainActivity",returnedData);
//                }
//                break;
//            default:
//        }
//    }

    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }

    //activity启动模式三:singleTask
//    @Override
//    protected void onRestart() {
//        super.onRestart();
//        Log.d("MainActivity","onRestart");
//    }
}

  • SecondActivity
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent1);

                //隐式定义方法一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();

                //接收来自MainActivity的消息
//                Intent intent4 = getIntent();  //使用getIntent()获得MainActivity传递来的intent
//                String data = intent4.getStringExtra("extra_data");
//                Log.d("SecondActivity",data);
//
//                //在命令按钮button被点击时返回MainActivity并带回数据
//                Intent intent5 = new Intent(); //建立新的intent
//                intent5.putExtra("data_return","Hello MainActivity");//将data用intent.putExtra()放入intent,
//                setResult(RESULT_OK,intent5);//setResult(RESULT_OK, intent)放置result
//                finish(); //销毁当前的Activity

                //activity启动模式二:singleTop
//                Log.d("SecondActivity",this.toString());
//                Intent intent7 = new Intent(SecondActivity.this,ThirdActivity.class);
//                startActivity(intent7);

                //activity启动模式三:singleTask
//                Log.d("SecondActivity","Task id is"+getTaskId());

                //activity启动模式四:singleInstance
                Log.d("SecondActivity","Task id is"+getTaskId());
                Intent intent = new Intent(SecondActivity.this,ThirdActivity.class);
            }
        });

    }
//activity启动模式三:singleTask
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        Log.d("SecondActivity","onDestroy");
//    }
}

  • ThirdActivity

六.activity最佳实践

1.知道当前页面是哪一个activity

  • 新建BaseActivity,代码如下
package com.example.lobster.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        Log.i("BaseActivity",getClass().getSimpleName());
    }
}

  • 让MainActivity、SecondActivity、ThirdActivity都继承BaseActivity。如图


2.随时随地退出程序

  • 创建一个普通的Java类ActivityCollector类
    实现所有的activity的添加、删除和finish()。
    在任何你想退出程序的地方调用ActivityCollector. finishAll()方法即可退出程序
package com.example.lobster.myapplication;

import android.app.Activity;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Lobster on 2020/10/16.
 */

public class ActivityCollector {
    public static List<Activity> activities = new ArrayList<Activity>();
    //添加activity的方法
    public static void addActivity(Activity activity){
        activities.add(activity);
    }
    //移除activity的方法
    public static void removeActivity(Activity activity){
        activities.remove(activity);
    }
    //finishAll
    public static void finishAll(){
        for (Activity activity:activities){
            if (!activity.isFinishing()){
                activity.finish();
            }
        }
    }
}

  • 然后,修改BaseActivity,在onCreate()中添加this,onDestory()中移除this
package com.example.lobster.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);

        //打印每个启动的Activity的名字
        Log.i("BaseActivity",getClass().getSimpleName());

        //在onCreate()中添加this---调用ActivityCollector类里面的add
        ActivityCollector.addActivity(this);
    }

        // onDestory()中移除this---调用 ActivityCollector类的removeActivity方法
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityCollector.removeActivity(this);

    }
}

  • 在要退出程序的地方调用finishAll()
    假定我们要在ThirdActivity退出,那么就要销毁所有的activity,
    一旦销毁,那么ThirdActivity页面将不能再像以前一样可以与MainActivity来回切换,将在ThirdActivity直接退出,完全退出该app
    假定我们要在ThirdActivity退出,代码如下
package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class ThirdActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);

//        Log.d("ThirdActivity",this.toString());
//        Log.d("ThirdActivity","Task id is"+getTaskId());
        Button button = (Button) findViewById(R.id.button3);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(ThirdActivity.this,MainActivity.class);
                startActivity(intent1);

                // 在要退出程序的地方调用finishAll():
//                ActivityCollector.finishAll(); //销毁所有的activity,
                /*
                    【即在ThirdActivity页面的时候,不能再像以前那样进入其他Activity,而是被全退出来,
                    因为这句代码使得所有的activity都被销毁了】

                 */
             //   ActivityCollector.finishAll();
//                android.os.Process.killProcess(android.os.Process.myPid());//杀死当前的进程
            }
        });
    }
}

3.给每个activity都添加一个合适的启动方法

情景:比如我需要启动一个SecondActivity,可是不知道该activity需要哪些参数,怎么办?
在SecondActivity中添加一个启动自己的方法:
代码如下

package com.example.lobster.myapplication;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class SecondActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(SecondActivity.this,ThirdActivity.class);
                startActivity(intent1);

                //隐式定义方法一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(SecondActivity.this,"return the MainActivity",Toast.LENGTH_LONG).show();

                //接收来自MainActivity的消息
//                Intent intent4 = getIntent();  //使用getIntent()获得MainActivity传递来的intent
//                String data = intent4.getStringExtra("extra_data");
//                Log.d("SecondActivity",data);
//
//                //在命令按钮button被点击时返回MainActivity并带回数据
//                Intent intent5 = new Intent(); //建立新的intent
//                intent5.putExtra("data_return","Hello MainActivity");//将data用intent.putExtra()放入intent,
//                setResult(RESULT_OK,intent5);//setResult(RESULT_OK, intent)放置result
//                finish(); //销毁当前的Activity

                //activity启动模式二:singleTop
//                Log.d("SecondActivity",this.toString());
//                Intent intent7 = new Intent(SecondActivity.this,ThirdActivity.class);
//                startActivity(intent7);

                //activity启动模式三:singleTask
//                Log.d("SecondActivity","Task id is"+getTaskId());

                //activity启动模式四:singleInstance
//                Log.d("SecondActivity","Task id is"+getTaskId());
//                Intent intent = new Intent(SecondActivity.this,ThirdActivity.class);
            }
        });

    }
//activity启动模式三:singleTask
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        Log.d("SecondActivity","onDestroy");
//    }

/*
       启动一个SecondActivity,可是不知道该activity需要哪些参数,怎么办?
    在SecondActivity中添加一个启动自己的方法
 */
    public static void actionStart(Context context,String data1,String data2){
        Intent intent9  =  new Intent(context,SecondActivity.class);
        intent9.putExtra("param1",data1);
        intent9.putExtra("param2",data2);
        context.startActivity(intent9);
    }

}

在SecondActivity中添加了actionStart ()方法之后,在任意的activity中启动SecondActivity,都可以调用该方法,而且知道需要传入哪些参数。
比如在MainActivity中启动方法为:
代码如下

package com.example.lobster.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*
            点击按钮实现activity之间的切换
            1.在button按钮上绑定监听事件setOnClickListener(new View.OnClickListener
            2.在setOnClickListener(new View.OnClickListener方法重写点击事件onClick(View v)
            3.在点击事件onClick(View v)中定义intent1
         */
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //显式定义intent1
                Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent1);

                //隐式定义方式一
//                Intent intent2 = new Intent("com.example.lobster.myapplication.SECOND_START");
//                startActivity(intent2);

                //隐式定义二
//                Intent intent3 = new Intent("com.example.lobster.myapplication.ACTION_START");
//                intent3.addCategory("com.example.lobster.myapplication.MY_CATEGORY");
//                startActivity(intent3);

                //使用消息弹框提示用户
                Toast.makeText(MainActivity.this, "enter the SecondActivity", Toast.LENGTH_LONG).show();

        //向SecondActivity传递数据
                //使用putExtra()将数据传入intent
//                String data = "Hello SecondActivity";
//                Intent intent4 = new Intent(MainActivity.this,SecondActivity.class);
//                intent4.putExtra("extra_data",data);
//                //startActivity(intent4);
//                /*
//                    不采用startActivity(),而采用startActivityForResult(intent, 1)。
//                    其中,1为requestCode,用于之后判断是不是自己发送出去的intent
//                 */
//                startActivityForResult(intent4,1);

                //activity启动模式一:standard
//                Log.d("MainActivity",this.toString());
//                Intent intent6 = new Intent(MainActivity.this,MainActivity.class);//自己启动自己
//                startActivity(intent6);

                //activity启动模式二:singleTop
//                Log.d("MainActivity",this.toString());
//                Intent intent7 = new Intent(MainActivity.this,SecondActivity.class);
//                startActivity(intent7);

                //activity启动模式三:singleTask
//                Log.d("MainActivity","Task id is"+getTaskId());

                //activity启动模式四:singleInstance
//                Log.d("MainActivity","Task id is"+getTaskId());
//                Intent intent8 = new Intent(MainActivity.this,SecondActivity.class);
//                startActivity(intent8);


                 /*
                    在SecondActivity中添加了actionStart ()方法之后,在任意的activity中启动SecondActivity,都可以调用该方法,
                   而且知道需要传入哪些参数。
                   比如在MainActivity中启动方法为:
                */

                SecondActivity.actionStart(MainActivity.this,"data1","data2");

            }
        });
    }
    /*
        SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,
        因此我们需要在FirstActivity中重写这个方法来得到返回的数据
     */

//    @Override
//    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//        switch (requestCode){
//            case 1:
//                if (resultCode == RESULT_OK){
//                    String returnedData = data.getStringExtra("data_return");
//                    Log.d("MainActivity",returnedData);
//                }
//                break;
//            default:
//        }
//    }

    //在activity中使用菜单
        // 重写onCreateOptionsMenu()方法创建菜单
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.main,menu);
            return true;
        }
        //定义菜单响应事件。重写onOptionsItemSelected()方法

    @Override //点击菜单按钮响应onOptionsItemSelected()方法,并出现消息弹框
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_Item_id:
                Toast.makeText(this,"You clicked addItem",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_Item_id:
                Toast.makeText(this,"You checked removeItem",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }

    //activity启动模式三:singleTask
//    @Override
//    protected void onRestart() {
//        super.onRestart();
//        Log.d("MainActivity","onRestart");
//    }

}

posted @ 2020-10-16 17:43  L小龙虾  阅读(161)  评论(0编辑  收藏  举报