Android学习日记 Intent And Bundle
一、Intent And Bundle
由主活动跳转到其他活动
二、使用步骤
1.普通用法
代码如下:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,NewActivity.class);
startActivity(intent);
}
});
Intent(当前上下文.this,另一个活动.class);
2.带参传值
代码如下:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,NewActivity.class);
intent.putExtra("aaa","Hello!World");
startActivity(intent);
}
});
跳到第二个页面可以根据putExtra里的值取出来,与Map<key,value>结构类似 ,根据键取值
3.intent的回调函数
话不多说直接上代码:
MainActivity中:
package com.example.practice;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText tvEdit;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
//初始化控件
tvEdit = findViewById(R.id.tvEdit);
btn = findViewById(R.id.btn);
//为点击事件添加监听
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//初始化变量 获取tvEdit的值
String data = tvEdit.getText().toString();
Intent intent = new Intent(MainActivity.this,NewActivity.class);
//放入数据
intent.putExtra("aaa",data);
//这里用startActivityForResult的方法跳入到NewActivity.java
// requestCode 为请求码 根据请求码
startActivityForResult(intent,1);
}
});
}
//重写 onActivityResult方法 使得回调时判断请求码 存入数据并展示
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//请求码
switch (requestCode) {
case 1:
//判断Result方法并取出
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.e("MainActivity", returnedData);
}
break;
default:
}
}
}
NewActivity中:
package com.example.practice;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class NewActivity extends AppCompatActivity {
private TextView tvShow;
private Button back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
init();
//取出上一个页面数据并赋值给tvShow
Intent intent = getIntent();
String str = intent.getStringExtra("aaa");
Log.e("aaaa",str+"");
tvShow.setText(str);
}
//初始化方法
private void init() {
tvShow = findViewById(R.id.tvShow);
back = findViewById(R.id.back);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(NewActivity.this,MainActivity.class);
//根据 键 取出数据并为intent赋值
String str = intent.getStringExtra("aaa");
intent.putExtra("data_return",str);
//设置Result方式 以及intent信息
setResult(RESULT_OK,intent);
//自动销毁方法
finish();
}
});
}
}
4.Bundle的用法
当一个活动进到停止状态是有可能被系统收回,如果活动被回收了怎么办?
首先声明两个控件元素
private EditText tvEdit;
private Button btn;
重写onSaveInstanceState方法用来存储用到的数据
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String data = "Hello World!";
outState.putString("data",data);
}
在onCreate里添加if 如果Bundle里有值 tvEdit里的值就被恢复啦
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
if (savedInstanceState!=null){
String data = savedInstanceState.getString("data");
tvEdit.setText(data);
}
}