坚持记录,相互帮助,一起进步
1.活动Activity
活动(Activity)是一种可以包含用户界面的组件。主要用于用户交互。一个应用可以包含一个或零个活动。
创建Activity很简单,新建一个java文件然后继承于AppCompatActivity(Activity的子类)即可。
如下创建两个Activity,分别是MainActivity和SecondActivity以及它们对应的layout,并且给它们的Button按钮设置了点击监听
MainActivity.java
package com.ice.activityandintent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button main_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_btn = findViewById(R.id.main_btn);
main_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/main_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="跳转到SecondActivity"/>
</androidx.constraintlayout.widget.ConstraintLayout>
SecondActivity.java
package com.ice.activityandintent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
private Button second_btn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
second_btn = findViewById(R.id.second_btn);
second_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/second_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳转到MainActivity"/>
</LinearLayout>
所有的Activity要在AndroidManifest清单注册
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ice.activityandintent">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity"/>
</application>
</manifest>
2.意图Intent
意图又分为显式意图和隐式意图
- 显式意图
显式意图很简单。如下
MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button main_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_btn = findViewById(R.id.main_btn);
main_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);//声明意图
startActivity(intent);//开始活动
}
});
}
}
- 隐式意图
隐式意图没有显式意图那么直接,需要在Androidmanifest声明action和category。
SecondActivity.java
main_btn = findViewById(R.id.main_btn);
main_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
//显式意图
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
*/
//隐式意图
Intent intent = new Intent("com.ice.activityandintent.ACTION_START");
intent.addCategory("com.ice.activityandintent.MY_CATEGORY");
startActivity(intent);
}
});
Androidmanifest
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.ice.activityandintent.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.ice.activityandintent.MY_CATEGORY" />
</intent-filter>
</activity>
3.Activity传参
(1)如果向另一个Activity传参并不需要再将数据返回,则用putExtra()方法即可
MainActivity.java
//显式意图
String data = "这是第一个Activity的数据";
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("MainActivity_Data",data);//第一个参数是键,第二个是值
startActivity(intent);
SecondActivity.java
Intent intent = getIntent();
String data = intent.getStringExtra("MainActivity_Data");
Toast.makeText(getApplicationContext(),data,Toast.LENGTH_SHORT).show();
上面传的数据是String,用getStringExtra()接收,若是int、boolean分别对应getIntExtra()和getBooleanExtra()方法
(2)如果需要返回数据给上一个Activity。用startAcitivtyForResult()方法启动activity,并且要重写onActivityResult()方法接收返回的数据。
MainActivity.java
String data = "这是第一个Activity的数据";
//显式意图
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("MainActivity_Data",data);//第一个参数是键,第二个是值
startActivityForResult(intent,1);//两个参数,第一个是intent,第二个是请求码,值唯一就行
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case 1:
String returnedData = data.getStringExtra("SecondActivity_Data");
Log.e("MainAcitivity", returnedData);
break;
}
}
SecondActivity.java
second_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent2 = new Intent();
intent2.putExtra("SecondActivity_Data","这是第第二个Activity");
setResult(RESULT_OK,intent2);//向上一个activity传递数据
finish();//关掉当前activity
}
});