Android

Activity系列——Activity配置和使用

2020-02-10  本文已影响0人  似焰如火

创建一个Activity的实现类很是简单,有如下代码即可:

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

一般需要重写onCreate方法,并通过setContentView设置布局文件。完事后,我们还需要在AndroidManifest.xml中对Activity进行注册。

1. 需要配置啥

创建一个Activity子类后,需要在AndroidManifest.xml中进行注册,所谓注册就是写一段如下配置字段

        <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>

说一下这些代表什么意思:

3. 怎么使用

一个Android应用一般包含多个Activity,其中有一个比较特殊,它是整个程序的入口,我们不妨叫它MainActivity,Android启动时会自动启动这个Activity。为何启动这个呢?因为这个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,指定应用程序最先启动的Activity android.intent.category.LAUNCHER,表示activity应该被列入系统的启动器(launcher)(允许用户启动它)。Launcher是安卓系统中的桌面启动器,是桌面UI的统称。
MainActivity是自动启动执行的,其它Activity则可以有MainActivity直接或间接启动。一个Activity启动其它Activity有两种方法,如下

  • startActivity(Intent intent)
    通过给定的Intent启动相应的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
    多了一个请求码参数,使用该方法启动Activity时,程序会等待新启动Activity返回的结果,当然这需要重写onActivityResult方法

用一个例子来说明第二种,例如在MainActivity中使用这个方法启动myActivity,并等待其返回结果。那么,MainActivity是如何获取到返回结果的呢?myActivity被启动后,何时返回结果并确定,开发者需要重写onActivityResult方法来等待被回调。

    @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设置一个返回值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. 用例详细代码

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补充

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

上一篇下一篇

猜你喜欢

热点阅读