header-object

Tạo Custom View trong lập trình Android - Phần 4

5.2 Tạo mới một Activity và mở nó thông qua Intent

Thông thường trong lập trình Android, mỗi màn hình được xử lý bởi một thành phần gọi là Activity. Ở khía cạnh lập trình, để tạo ra một Activity chúng ta tạo ra một lớp kế thừa từ lớp Activity có sẵn trong package android.app.

Trong project VietnamTourism, tạo mới một class có tên VietnameseActivity kế thừa từ lớp Activity:

vietnamtourism h2

Tiếp tục, hãy override phương thức onCreate() để có được mã nguồn như sau:

package com.danweb.vietnamtourism;
import android.app.Activity;
import android.os.Bundle;
public class VietnameseActivity extends Activity {
	@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
		
	/*tập tin res/layout/activity_vietnamese.xml làm 
		layout hiển thị cho activity này*/
		setContentView(R.layout.activity_vietnamese);
	}
}
  

Android yêu cầu chúng ta phải khai báo tất cả các Activity có trong project. Mở tập tin AndroidManifest.xml ở chế độ code và hực hiện khai báo VietnameseActivity bằng thẻ <activity> nằm trong thẻ <application> như sau:

<activity android:name="VietnameseActivity"></activity>

Tiếp sau chúng ta cần viết mã để khi người dùng nhấn vào nút Vietnamese trên giao diện của MainActivity sẽ thực hiện mở VietnameseActivity.

Mở tập tin MainActivity.java, thêm vào phương thức _openVietnameseActivity() như đoạn mã sau:

private void _openVietnameseActivity(){
    	/*để mở VietnameseActivity, chúng ta cần 1 
    	đối tượng Intent gắn với lớp VietnameseActivity*/
    	Intent itVietnamese = new Intent(getApplicationContext(), VietnameseActivity.class);
    	
    	//dùng phương thức startActivity() để thực hiện mở
    	startActivity(itVietnamese);
    }

Quay lại phương thức onCreate(), chúng ta sẽ sửa lại chút xíu mã nguồn để khi người dùng bấm vào nút Vietnamese (đã nói ở bài trước) sẽ gọi phương thức _openVietnameseActivity() này.

Mã nguồn cho đến thời điểm này của lớp MainActivity sẽ như sau:

package com.danweb.vietnamtourism;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        CustomButton vietnamese = (CustomButton) findViewById(R.id.iconVietnamese);
        vietnamese.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//gọi phương thức mở VietnameseActivity
				_openVietnameseActivity();
			}
		});
    }
    
    private void _openVietnameseActivity(){
    	/*để mở VietnameseActivity, chúng ta cần 1 
    	đối tượng Intent gắn với lớp VietnameseActivity*/
    	Intent itVietnamese = new Intent(getApplicationContext(), VietnameseActivity.class);
    	
    	//dùng phương thức startActivity() để thực hiện mở
    	startActivity(itVietnamese);
    }
}

Bấm F11 để chạy ứng dụng lên Emulator, bấn vào nút Vietnamese trên Main Activity sẽ mở ra VietnameseActivity chứa ListView như hình minh họa sau:

vietnamtourism h3

5.3 Dữ liệu động và ListView

Ở trên, dữ liệu hiển thị trên ListView là một mảng các phần tử được khai báo trong tập tin res/values/strings.xml. Dễ dàng nhận thấy dữ liệu trong này là dữ liệu tĩnh. Thực tế thì chúng ta sẽ phải thường xuyên tạo ra các ListView từ các nguồn dữ liệu động (như là truy vấn từ CSDL, qua Web-service…).

Tiếp sau đây, chúng ta sẽ tạo ra một mảng động chứa các phần tử. Dùng một đối tượng ArrayAdapter để đặt dữ liệu trong mảng này lên một ListView.

Mở tập tin VietnameseActivity.java và thêm vào các nội dung để có được như sau:

package com.danweb.vietnamtourism;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class VietnameseActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		/*tập tin res/layout/activity_vietnamese.xml làm 
		layout hiển thị cho activity này*/
		setContentView(R.layout.activity_vietnamese);
		
		//Tạo một mảng động chứa các phần tử là String
		ArrayList vietnamese = new ArrayList();
		
		//thêm các phần tử vào mảng động vietnamese
		vietnamese.add("Hồ Chí Minh");
		vietnamese.add("Trần Hưng Đạo");
		vietnamese.add("Ngô Bảo Châu");
		vietnamese.add("Nguyễn Huệ");
		vietnamese.add("Võ Nguyên Giáp");
		vietnamese.add("Hoàng Diệu");
		vietnamese.add("Đặng Thái Sơn");
		vietnamese.add("Nguyễn Trãi");
		vietnamese.add("Trịnh Công Sơn");
		vietnamese.add("Nguyễn Du");
		
		//tạo một ArrayAdapter giúp đặt dữ liệu vào ListView
		Context ct 		= getApplicationContext();
		int listLayout 	= android.R.layout.simple_list_item_1;
		int itemView 	= android.R.id.text1;
		ArrayAdapter vnAdapter = new ArrayAdapter(ct, listLayout, itemView, vietnamese);
		
		//lấy về ListView đã đặt trên activity_vietnamese.xml
		ListView listViewVietnamese = (ListView) findViewById(R.id.listViewVietnamese);
		
		//sử dụng vnAdapter cho listViewVietnamese
		listViewVietnamese.setAdapter(vnAdapter);
	}
}

Bây giờ, chúng ta có thể mở tập tin activity_vietnamese.xml và bỏ đi thuộc tính entries vì chúng ta không còn cần dùng đến mảng tĩnh trong tập tin strings.xml nữa:

android:entries="@array/vietnamese"

F11 để kiểm tra ứng dụng trên Emulator và chúng ta vẫn thu được kết quả như trường hợp mảng tĩnh.

Còn tiếp...

Đào Ngọc Giang

Thêm ý kiến


Security code
Làm mới


2

Facebook

Thống kê truy cập

Hiện có 759 khách đang truy cập
2491920