https://thangcoder.com/lap-trinh-android/chuyen-doi-giua-cac-activity-voi-nhau-trong-android
Từ bài 1 cho đến bây giờ chúng ta mới chỉ thao tác duy nhất ở một Activity đúng không các bạn? Nhưng trong một ứng dụng thì không thể nào có một màn hình duy nhất được mà nó còn rất nhiều màn hình khác, và việc tương tác giữa các màn hình là điều mà bạn không thể nào tránh khỏi.
Và chuyển đổi giữa các màn hình này với màn hình khác hay nó cách khác là giữa Activity này với Activity khác thì cũng là chuyện thường làm, vậy hôm nay chúng ra sẽ tìm hiểu nó và ở bài sau chúng ta sẽ tìm hiểm cách truyền dữ liệu giữa hai activity nhé.
Để gọi một Activity khác thì thông thường chúng ta chỉ có một cách duy nhất là sử dụng Intent, kiến thức về Intent rất rộng nên mình sẽ nói ở một bài viết khác còn hôm nay các bạn chỉ cần nắm rõ cách dùng là được bởi vì nó là cú pháp mặc định không thay đổi được.
Chúng ta bắt tay vào làm nào, bây giờ mình sẽ tạo ra 2 Activity A và B, ở màn hình A sẽ có nút Button khi click vào thì nó sẽ chuyển qua màn hình B nhé, bây giờ mình sẽ khởi tạo các file như sau:
Tổng quát project sẽ như sau:
1. Tạo ActivityA, đây là Activity khởi động đầu tiên khi vào app nhé, mặc định khi khởi tạo project là MainActivity bạn sửa tên thành ActivityA là được:
ActivityA.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.cheng.bai19activitytoactivity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class ActivityA extends AppCompatActivity {
private Button btnCallActivityB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
btnCallActivityB = (Button) findViewById(R.id.btnCallActivityB);
btnCallActivityB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
}
});
}
}
|
2. Đây là file layout_a, layout của ActivityA bạn:
layout_a.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<Button
android:id="@+id/btnCallActivityB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/button_call" />
</LinearLayout>
|
3. Chuột phải vào package chọn New => Java class và tạo ActivityB như sau:
ActivityB.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.cheng.bai19activitytoactivity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
/**
* Created by Welcome on 8/27/2016.
*/
public class ActivityB extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
}
}
|
4. Chuột phải vào thư mục layout chọn New => Layout resource file để tạo layout cho ActivityB:
layout_b.xml
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/activity_b" />
</LinearLayout>
|
5. Chỉnh sửa lại file strings.xml vì ở trên mình định nghĩa text trong này, vào value => string.xml để sửa đổi:
strings.xml
1
2
3
4
5
|
<resources>
<string name="app_name">Bai19ActivitytoActivity</string>
<string name="activity_b">Đây là Activity B</string>
<string name="button_call">Call Activity B</string>
</resources>
|
Mình sẽ giải thích đoạn code chính ở ActivityA như sau:
1
2
3
4
5
6
7
|
btnCallActivityB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
}
});
|
Khi click vào nút Button ở màn hình A nó sẽ thực hiện việc call ActivityB thông qua khởi tạo một đối tượng intent:
1
|
Intent intent = new Intent(ActivityA.this, ActivityB.class);
|
Ở trên bạn sẽ truyền vào 2 params, 1 là Activity hiện tại và param thứ 2 chính là Activity đích mà bạn muốn chuyển đến, rất đơn giản đúng không nào.Sau đó gọi hàm startActivity() và truyền vào intent đã khai báo thì tự động nó sẽ hiểu là bạn đang muốn di chuyển từ ActivityA sang Activity B và lúc nào ActivityB sẽ hiện lên.
Một lưu ý nhỏ là khi bạn khởi tạo một Activity bạn phải khai báo trong file AndroidManifest.xmlchứ không là xảy ra lỗi ngay các này mình sẽ nói rõ trong bài cấp quyền trong Android ở bài sau nữa nhé.
AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cheng.bai19activitytoactivity">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ActivityA">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ActivityB"/>
</application>
</manifest>
|
Các bạn nên sửa lại tên package cho đúng như project các bạn không là sẽ lỗi đó nhé, không thì bạn cứ import project phía dưới của mình đã có sẵn ở github.
Nhận xét
Đăng nhận xét