Activity系列——Activity配置和使用

創(chuàng)建一個(gè)Activity的實(shí)現(xiàn)類很是簡單,有如下代碼即可:

public class myActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

一般需要重寫onCreate方法,并通過setContentView設(shè)置布局文件。完事后,我們還需要在AndroidManifest.xml中對(duì)Activity進(jìn)行注冊。

1. 需要配置啥

創(chuàng)建一個(gè)Activity子類后,需要在AndroidManifest.xml中進(jìn)行注冊,所謂注冊就是寫一段如下配置字段

        <activity android:name="myActivity"
            android:label="@string/Activity_label"
            android:icon="@drawable/ic_launcher_background"
            android:exported="true"
            android:launchMode="standard">
            <intent-filter>
                <action android:name="android.intent.action.QQ" />
            </intent-filter>
        </activity>

說一下這些代表什么意思:

  • android:name="myActivity",用于指定Activity實(shí)現(xiàn)類的類名,該名必須和類名相同
  • android:label="@string/Activity_label",用于指定該Activity的標(biāo)簽
  • android:icon="@drawable/ic_launcher_background",指定圖標(biāo)
  • android:exported="true",配置該Activity是否可以被其他應(yīng)用調(diào)用
  • android:launchMode="standard",配置Activity的加載模式,不同的加載模式介紹可以參考Activity系列——加載模式。
  • <intent-filter ... >,指定一個(gè)或多個(gè)intent-filter,用于說明該Activity可以響應(yīng)哪些Intent。

3. 怎么使用

一個(gè)Android應(yīng)用一般包含多個(gè)Activity,其中有一個(gè)比較特殊,它是整個(gè)程序的入口,我們不妨叫它MainActivity,Android啟動(dòng)時(shí)會(huì)自動(dòng)啟動(dòng)這個(gè)Activity。為何啟動(dòng)這個(gè)呢?因?yàn)檫@個(gè)MainActivity的配置中寫了這些東西

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

android.intent.action.MAIN,指定應(yīng)用程序最先啟動(dòng)的Activity android.intent.category.LAUNCHER,表示activity應(yīng)該被列入系統(tǒng)的啟動(dòng)器(launcher)(允許用戶啟動(dòng)它)。Launcher是安卓系統(tǒng)中的桌面啟動(dòng)器,是桌面UI的統(tǒng)稱。
MainActivity是自動(dòng)啟動(dòng)執(zhí)行的,其它Activity則可以有MainActivity直接或間接啟動(dòng)。一個(gè)Activity啟動(dòng)其它Activity有兩種方法,如下

  • startActivity(Intent intent)
    通過給定的Intent啟動(dòng)相應(yīng)的Activity
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent intent = new Intent(MainActivity.this, myActivity.class);
        startActivity(intent);
    }
}
  • startActivityForResult(Intent intent, int requestCode),注意requestCode需要 >= 0,否則沒有返回,可參考https://blog.csdn.net/yanzhenjie1003/article/details/99656633
    多了一個(gè)請(qǐng)求碼參數(shù),使用該方法啟動(dòng)Activity時(shí),程序會(huì)等待新啟動(dòng)Activity返回的結(jié)果,當(dāng)然這需要重寫onActivityResult方法

用一個(gè)例子來說明第二種,例如在MainActivity中使用這個(gè)方法啟動(dòng)myActivity,并等待其返回結(jié)果。那么,MainActivity是如何獲取到返回結(jié)果的呢?myActivity被啟動(dòng)后,何時(shí)返回結(jié)果并確定,開發(fā)者需要重寫onActivityResult方法來等待被回調(diào)。

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if (requestCode == 0 && resultCode == 0) {
            Bundle data = intent.getExtras();
            String result = data.getString("code");
            show.setText(result);
        }
    }

而在myActivity中需要通過setResult設(shè)置一個(gè)返回值resultCode。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1 = findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = getIntent();
                intent.putExtra("code","你好,中國");
                myActivity.this.setResult(0,intent);
                myActivity.this.finish();
            }
        });
    }

4. 用例詳細(xì)代碼

myActivity.java

public class myActivity extends Activity {
    public Button bt1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1 = findViewById(R.id.bt1);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = getIntent();
                intent.putExtra("code","你好,中國");
                myActivity.this.setResult(0,intent);
                myActivity.this.finish();
            }
        });

    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {
    public TextView show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = findViewById(R.id.show);
        Intent intent = new Intent(MainActivity.this, myActivity.class);
        startActivityForResult(intent,0);
       //requestCode要>=0,否則沒有返回
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        if (requestCode == 0 && resultCode == 0) {
            Bundle data = intent.getExtras();
            String result = data.getString("code");
            show.setText(result);
        }
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <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="myActivity"
            android:label="@string/app_name"
            android:icon="@drawable/ic_launcher_background"
            android:exported="true"
            android:launchMode="standard">
            <intent-filter>
                <action android:name="android.intent.action.QQ" />
            </intent-filter>
        </activity>
    </application>

</manifest>

5. AndroidManifest.xml文件配置Activity補(bǔ)充

參考原文https://blog.csdn.net/wusuobupo/article/details/52833357

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

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

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