初识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实例,则:
- 将task内的对应Activity实例之上的所有Activity弹出栈。
- 将对应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");
// }
}