Android基础知识:Activity(3)Activity之
2018-12-23 本文已影响35人
JYangkai
废话
本文我们来学习Activity之间的跳转
显式启动
主界面放一个Button,用于跳转,Second界面就放一个TextView
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG=MainActivity.class.getSimpleName();
private Button mBtn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG,"onCreate");
mBtn=(Button)findViewById(R.id.main_btn);
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/main_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start SecondActivity"/>
</LinearLayout>
SecondActivity.java
public class SecondActivity extends AppCompatActivity{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Second Activity"
android:textColor="#000000"
android:textSize="18sp"/>
</LinearLayout>
AndroidMainfest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yk.activitydemo">
<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=".SecondActivity"/>
</application>
</manifest>
界面跳转主要是通过构建Intent,然后调用Activity的startActivity方法去启动
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
Intent接收两个参数,一个是Context,一个是需要跳转的Activity(Context有三种,分别是Application、Activity、Service,具体区别之后会发专门的文章来分析)
隐式启动
隐式启动也需要构建Intent,不过Intent传入的参数是一串字符,这串字符是由你自己定义的
我们先来修改AndroidManifest.xml
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="yk.demo.second"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
action自定义一个字符串,按自己喜欢的风格命名就行了
categroy也是由自己定义,但这里我们就用一个默认的字符串
接着修改MainActivity.java
mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent("yk.demo.second");
startActivity(intent);
}
});
注意这个Intent传入的参数要和之前定义的action一样
如果在AndroidManifest.xml中加了自己的category,那么就要这样写
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="yk.demo.second"/>
<category android:name="yk.demo.second.category"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Intent intent=new Intent("yk.demo.second");
intent.addCategory("yk.demo.second.category");
startActivity(intent);
我们在启动时要匹配所有的category才能启动
这时,你会发现我没有将android.intent.category.DEFAULT加进去
这是因为startActivity的时候,系统会自动自动帮我们加上
intent.addCategory(“android.intent.category.DEFAULT”);
这个就是隐式启动。