前言:不論是在哪一個app中都會有很多頁面确垫,比如某q扁眯、某x疙挺,從聊天列表可以進入聊天頁面钮呀,這是兩個完全不同的頁面剑鞍。這個東西在Android中叫做 Activity (活動)
一、Activity 三要素
在我們新建一個項目之后行楞,AndroidStudio(后面簡稱AS)都會給我們創(chuàng)建好一個Activity(后面簡稱Act),那么這個頁面就作為了App的啟動頁面土匀。 下面來說一個Act組成的三要素子房。
1.1 布局文件 .xml
路徑在app \ src \ main \ res \ layout
舉個例子,系統(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。這個Activity的子類妒御,所以滿足要求解愤。
2.還有他重寫了onCreate方法,并且調(diào)用了一個 setContentView() 方法乎莉,這個方法是用來填充布局的送讲,R:資源 layout屬于資源, activity_main 就是對應(yīng)的xml布局了
1.3 要在AndroidManifest中注冊Activity
注意注冊Act要在 application節(jié)點中間寫
<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>
</application>
二哼鬓、Activity的跳轉(zhuǎn)與傳值跳轉(zhuǎn)
學(xué)會了act的組成,那我們需要從一個頁面跳到另一個頁面需要怎么做边灭。
1异希、創(chuàng)建好目標頁面
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寫一個按鈕惰帽,點擊按鈕然后跳轉(zhuǎn)到 Main2
Button button = findViewById(R.id.btn_goto2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//構(gòu)建一個Intent對象 參數(shù)1:當(dāng)前頁面的上下文 參數(shù)2:目標Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//跳轉(zhuǎn)Act 參數(shù):intent對象
startActivity(intent);
}
});
點擊前:
點擊后:
3憨降、 頁面?zhèn)髦堤D(zhuǎn)
如果我們現(xiàn)在有需求,要求頁面Main->Main2 帶參數(shù)或者帶內(nèi)容過去怎么辦该酗。
我們在Main的跳轉(zhuǎn)里做手腳
//構(gòu)建一個Intent對象 參數(shù)1:當(dāng)前頁面的上下文 參數(shù)2:目標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);
}
看效果,點擊前:
點擊后:
有人可能會說烁焙,我不光想傳String航邢,還想有其他類型,當(dāng)然Android都提供了骄蝇,這里不做演示膳殷,把支持參數(shù)貼出來:
當(dāng)然有這么多類型,到了Main2 也就會有 intent.getXXX
4九火、頁面跳轉(zhuǎn)回傳
假設(shè)赚窃,我們在Main跳轉(zhuǎn)到Main2 ,當(dāng)Main2做了某些操作岔激,我們Main頁面需要知道勒极,那么就用到了跳轉(zhuǎn)回傳,這個需要兩個頁面配合虑鼎,我們來演示一下辱匿。
Main中代碼:
//構(gòu)建一個Intent對象 參數(shù)1:當(dāng)前頁面的上下文 參數(shù)2:目標Act.class
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
//intent.putExtra
intent.putExtra("content","我是頁面1傳來的值");
//跳轉(zhuǎn)回傳
startActivityForResult(intent,100);
我們在Main2中加一個按鈕為:確認更新
然后點擊按鈕的時候關(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();
}
});
我們完成了準備工作炫彩,這里要注意的一點是匾七,在Main中還需要重寫一個方法:onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//一個請求碼,一個響應(yīng)碼江兢。 data是參數(shù)
if (requestCode==100&&resultCode==200){
//100是我們跳轉(zhuǎn)的時候填的
//200是在Main2中填的
//這里我們直接把傳過來的值昨忆,顯示在按鈕上
String result = data.getStringExtra("result");
button.setText(result);
}
}
}
來看演示
ok