Android入門計(jì)劃<五>---頁面的創(chuàng)建和頁面之間的跳轉(zhuǎn)

前言:不論是在哪一個(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


image.png

布局文件里就是我們需要展示的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)擊前:


image.png

點(diǎn)擊后:


image.png

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)擊前:


image.png

點(diǎn)擊后:


image.png

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


image.png

當(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);

image.png

我們在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);
        }
    }
}

來看演示


r6f3t-4epl1.gif

ok

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容