前言:不論是在哪一個(gè)app中都會有很多頁面,比如某q、某x,從聊天列表可以進(jìn)入聊天頁面,這是兩個(gè)完全不同的頁面。這個(gè)東西在Android中叫做 Activity (活動)
一、Activity 三要素
在我們新建一個(gè)項(xiàng)目之后,AndroidStudio(后面簡稱AS)都會給我們創(chuàng)建好一個(gè)Activity(后面簡稱Act),那么這個(gè)頁面就作為了App的啟動頁面。 下面來說一個(gè)Act組成的三要素。
1.1 布局文件 .xml
路徑在app \ src \ main \ res \ layout
舉個(gè)例子,系統(tǒng)給我們的創(chuàng)建的 acitvity_main.xml

布局文件里就是我們需要展示的ui。
1.2 控制布局的java文件
以系統(tǒng)創(chuàng)建的為例:app \ src \ main \ java \ com \ example \ myapplication \ MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
1.我們發(fā)現(xiàn)它繼承了 AppCompatActivity ,我們的要求是 繼承于Activity。這個(gè)Activity的子類,所以滿足要求。
2.還有他重寫了onCreate方法,并且調(diào)用了一個(gè) setContentView() 方法,這個(gè)方法是用來填充布局的,R:資源 layout屬于資源, activity_main 就是對應(yīng)的xml布局了
1.3 要在AndroidManifest中注冊Activity
注意注冊Act要在 application節(jié)點(diǎn)中間寫
<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" />//意味著它是啟動頁,一個(gè)項(xiàng)目中只能有一個(gè)啟動頁
</intent-filter>
</activity>
</application>
二、Activity的跳轉(zhuǎn)與傳值跳轉(zhuǎn)
學(xué)會了act的組成,那我們需要從一個(gè)頁面跳到另一個(gè)頁面需要怎么做。
1、創(chuàng)建好目標(biāo)頁面
a、xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
tools:context=".Main2Activity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="我是頁面2"/>
</LinearLayout>
b、java文件 名字為:Main2Activity
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
}
c、清單文件注冊
<activity android:name=".Main2Activity"></activity>
2、寫跳轉(zhuǎn)方法
比如我們在Main要跳轉(zhuǎn)到Main2
我們在Main寫一個(gè)按鈕,點(diǎn)擊按鈕然后跳轉(zhuǎn)到 Main2
Button button = findViewById(R.id.btn_goto2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//構(gòu)建一個(gè)Intent對象 參數(shù)1:當(dāng)前頁面的上下文 參數(shù)2:目標(biāo)Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//跳轉(zhuǎn)Act 參數(shù):intent對象
startActivity(intent);
}
});
點(diǎn)擊前:

點(diǎn)擊后:

3、 頁面?zhèn)髦堤D(zhuǎn)
如果我們現(xiàn)在有需求,要求頁面Main->Main2 帶參數(shù)或者帶內(nèi)容過去怎么辦。
我們在Main的跳轉(zhuǎn)里做手腳
//構(gòu)建一個(gè)Intent對象 參數(shù)1:當(dāng)前頁面的上下文 參數(shù)2:目標(biāo)Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//intent.putExtra
intent.putExtra("content","我是頁面1傳來的值");
//跳轉(zhuǎn)Act 參數(shù):intent對象
startActivity(intent);
然后在Main2接收,并且讓其顯示在Main2的文本框上
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
TextView textView = findViewById(R.id.tv_main2);
//獲取intent信息
Intent intent = getIntent();
//獲取intnet、傳來的值
String content = intent.getStringExtra("content");
//設(shè)置在textview中
textView.setText(content);
}
看效果,點(diǎn)擊前:

點(diǎn)擊后:

有人可能會說,我不光想傳String,還想有其他類型,當(dāng)然Android都提供了,這里不做演示,把支持參數(shù)貼出來:

當(dāng)然有這么多類型,到了Main2 也就會有 intent.getXXX
4、頁面跳轉(zhuǎn)回傳
假設(shè),我們在Main跳轉(zhuǎn)到Main2 ,當(dāng)Main2做了某些操作,我們Main頁面需要知道,那么就用到了跳轉(zhuǎn)回傳,這個(gè)需要兩個(gè)頁面配合,我們來演示一下。
Main中代碼:
//構(gòu)建一個(gè)Intent對象 參數(shù)1:當(dāng)前頁面的上下文 參數(shù)2:目標(biāo)Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//intent.putExtra
intent.putExtra("content","我是頁面1傳來的值");
//跳轉(zhuǎn)回傳
startActivityForResult(intent,100);

我們在Main2中加一個(gè)按鈕為:確認(rèn)更新
然后點(diǎn)擊按鈕的時(shí)候關(guān)閉Mian2,讓Main得到某些信息
Main2代碼:
Button button = findViewById(R.id.btn_main2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("result","我更新完了");
setResult(200,intent);
finish();
}
});
我們完成了準(zhǔn)備工作,這里要注意的一點(diǎn)是,在Main中還需要重寫一個(gè)方法:onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//一個(gè)請求碼,一個(gè)響應(yīng)碼。 data是參數(shù)
if (requestCode==100&&resultCode==200){
//100是我們跳轉(zhuǎn)的時(shí)候填的
//200是在Main2中填的
//這里我們直接把傳過來的值,顯示在按鈕上
String result = data.getStringExtra("result");
button.setText(result);
}
}
}
來看演示

ok