Thứ Năm, 15 tháng 5, 2014

Liên kết giữa các activity sử dụng Intent

Một ứng dụng Android có thể chứa 1 hoặc nhiều activity. Khi ứng dụng có chứa nhiều hơn 1 activity, chúng ta cần di chuyển từ activity này sang activity khác. Trong Android, để di chuyển giữa các activity chúng ta phải sử dụng Intent.
Trong bài hôm nay mình sẽ giới thiệu cho các bạn cách di chuyển giữa 2 activity và chuyền tham số từ activity này sang activity kia.
Click chuột phải vào package trong folder src và chọn New/Class. Chúng ta đặt tên của class là SecondActivity , sau đó click vào nút Finish.

Tiếp theo chúng ta cần tạo 1 giao diện UI cho activity này: Click chuột phải vào folder res/layout chọn New/Android XML File. Đặt tên cho file này là secondlayout.xml, sau đó finish.

Điều chỉnh file secondlayout.xml như sau:
<?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"
android:eek:rientation="vertical" >

<TextView
android:gravity="center"
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is second activity" />

</LinearLayout>

Trong file SecondActivity.java, chúng ta cũng điều chỉnh lại như sau:
package android.vn.linkactivity;

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.secondlayout);
}

}

Tiếp theo chúng ta cần khai báo SecondActivity trong file AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.vn.linkactivity"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="SecondActivity"></activity>

</application>
Trở lại với MainActivity, chúng để điều chỉnh 1 chút file activity_main.xml để xử lý sự kiện gọi ra SecondActivity:
<RelativeLayout 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" >


<Button
android:id="@+id/btnSecond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginRight="31dp"
android:text="Goi ra activity thu 2" />

</RelativeLayout>

Trong file MainActivity.java, chúng ta sẽ sử dụng Intent để gọi ra activity thứ 2- SecondActivity:
package android.vn.linkactivity;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

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

Button btn = (Button) findViewById(R.id.btnSecond);
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent second = new Intent(MainActivity.this, SecondActivity.class);
startActivity(second);
}
});
}

}
Ấn F11 để build ứng dụng lên thiết bị android hoặc emulator.
Tiếp theo mình sẽ chỉ cho các bạn cách truyền tham số từ MainActivity sang SecondActivity:
Trở lại với class MainActivity.java, để truyền tham số giữa 2 activity chúng ta sẽ sử dụng chính Intent làm cầu nối để chứa giá trị cần truyền thông qua hàm putExtra:
second.putExtra(name, value);
ở đây: second là Intent làm cầu nối giữa 2 activity
name: là tên của tham số cần truyền (kiểu String)
value: là giá trị của tham số cần truyền (value có thể là kiểu: Boolean, byte, int, String, double, float, Bundle…)
Điều chỉnh lại class MainActivity.java như sau:
package android.vn.linkactivity;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

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

Button btn = (Button) findViewById(R.id.btnSecond);
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent second = new Intent(MainActivity.this, SecondActivity.class);
second.putExtra("Truyen_string", "Hello Android.vn");
second.putExtra("Truyen_int", 12);
startActivity(second);
}
});
}

}
Cuối cùng, điều chỉnh class SecondActivity.java để nhận giá trị mà MainActivity đã truyền:
package android.vn.linkactivity;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.secondlayout);

TextView tv =(TextView) findViewById(R.id.textView1);
Bundle extras = getIntent().getExtras();
if(extras !=null){
String mString = extras.getString("Truyen_string");
int mInt = extras.getInt("Truyen_int");
tv.setText(mString+"\n"+ "Hom nay la ngay "+ mInt);
}
}

}

0 comments:

Đăng nhận xét

Code by : Truongcom