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.xml chứ 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.
Nội dung
Video hướng dẫn chuyển đổi giữa các Activity trong android
Download Source Code
[sociallocker id=”635″]
[/sociallocker]Chúc các bạn thành công!
Tiếp theo
anh ơi cho hỏi chút: em đang viết app android cho đồ án tốt nghiệp của mình:
có 1 vấn đề là khi đang đứng ở main activity khi nhấn vào button để di chuyển sang activity mới trên đó em custom gridview cỡ 12 cái hình và chữ nữa
thì quá trình chạy sang acttivity mới rất chậm cỡ 1 đến 2s
code không bị lỗi gì hết, anh có cách nào giải quyết ko giúp em với.
Nhưng mà khi em để bỏ hết hình ảnh với chữ đi chỉ còn activity trống thì quá trình di chuyển từ activity main sang activity thứ 2 này diễn ra bình thường nhanh chóng ko có gì hết
vậy anh có cách nào mà di chuyển từ activity này sang activity khác mà trên activity khác này có custom imageview diễn ra nhanh chóng bình thường không chứ em làm xong bấm 1 cái chờ gần 2 s nó mới hiện ra. cảm ơn nhiều !!!