[Giải thuật đồ thị] Tìm hiểu các giải thuật đồ thị qua các ví dụ

Tìm hiểu các giải thuật đồ thị qua các ví dụ

Theo Wikipedia

Trong toán học và tin học, lý thuyết đồ thị (tiếng Anh: graph theory) nghiên cứu các tính chất của đồ thị. Một cách không chính thức, đồ thị là một tập các đối tượng được gọi là các đỉnh (hoặc nút) nối với nhau bởi các cạnh (hoặc cung). Cạnh có thể có hướng hoặc vô hướng. Đồ thị thường được vẽ dưới dạng một tập các điểm (các đỉnh nối với nhau bằng các đoạn thẳng (các cạnh).

Đồ thị biểu diễn được rất nhiều cấu trúc, nhiều bài toán thực tế có thể được biểu diễn bằng đồ thị. Ví dụ, cấu trúc liên kết của một website có thể được biểu diễn bằng một đồ thị có hướng như sau: các đỉnh là các trang web hiện có tại website, tồn tại một cạnh có hướng nối từ trang A tới trang B khi và chỉ khi A có chứa 1 liên kết tới B. Do vậy, sự phát triển của các thuật toán xử lý đồ thị là một trong các mối quan tâm chính của khoa học máy tính.

Lý thuyết đồ thị


Cấu trúc đồ thị có thể được mở rộng bằng cách gán trọng số cho mỗi cạnh. Có thể sử dụng đồ thị có trọng số để biểu diễn nhiều khái niệm khác nhau. Ví dụ, nếu đồ thị biểu diễn một mạng đường giao thông, các trọng số có thể là độ dài của mỗi con đường. Một cách khác để mở rộng đồ thị cơ bản là quy định hướng cho các cạnh của đồ thị (như đối với các trang web, A liên kết tới B, nhưng B không nhất thiết cũng liên kết tới A). Loại đồ thị này được gọi là đồ thị có hướng. Một đồ thị có hướng với các cạnh có trọng số được gọi là một lưới.

Các lưới có nhiều ứng dụng trong khía cạnh thực tiễn của lý thuyết đồ thị, chẳng hạn, phân tích lưới có thể dùng để mô hình hoá và phân tích mạng lưới giao thông hoặc nhằm "phát hiện" hình dáng của Internet - (Xem thêm các ứng dụng đưới đây. Mặc dù vậy, cũng nên lưu ý rằng trong phân tích lưới, thì định nghĩa của khái niệm "lưới" có thể khác nhau và thường được chỉ ra bằng một đồ thị đơn giản.)

Lý thuyết đồ thị nói riêng, toán rời rạc nói chung là nội dung không thể thiếu trong chương trình đào tạo của kỹ sư ngành CNTT. Học phần này sẽ giúp sinh viên hình thành được kỹ năng giải quyết bài toán một cách tối ưu thông qua các thuật toán kinh điển trong toán học, đặc biệt là các thuật toán tìm đường đi ngắn nhất.

Đã có rất nhiều ứng dụng của lý thuyết này trong các lĩnh vực khác nhau như: bài toán vấn tải, bài toán người du lịch, bài toán tìm đường của gói tin trên Internet, bài toán tối ưu, các bài toán sinh học, di truyền, ...

Cách tốt nhất để làm chủ các thuật toán về đồ thị là cài đặt và chạy thử nó trên một bài tóan cụ thể nào đó. Trong bài viết này, tôi sẽ mang đến cho bạn một số ví dụ cài đặt thuật toán quan trọng trong lý thuyết đồ thị.

Ví dụ cài đặt thuật toán đồ thị:



1.  [THUẬT TOÁN ĐỒ THỊ / CODE C++] TÌM SỐ THÀNH PHẦN LIÊN THÔNG CỦA ĐỒ THỊ G


2.  [THUẬT TOÁN ĐỒ THỊ / CODE C++] THUẬT TOÁN KRUSKAL TÌM CÂY KHUNG NHỎ NHẤT CỦA ĐỒ THỊ G


3. [THUẬT TOÁN ĐỒ THỊ / CODE C++] THUẬT TOÁN PRIM TÌM CÂY KHUNG NHỎ NHẤT CỦA ĐỒ THỊ G


4. [THUẬT TOÁN ĐỒ THỊ / CODE C++] THUẬT TOÁN DIJKSTRA TÌM ĐƯỜNG ĐI NGẮN NHẤT TRÊN ĐỒ THỊ G


5. [THUẬT TOÁN ĐỒ THỊ / CODE C++] THUẬT TOÁN ELUER - TÌM CHU TRÌNH ELUER TRÊN ĐỒ THỊ G


6. [THUẬT TOÁN ĐỒ THỊ / CODE C++] THUẬT TOÁN HAMILTON - TÌM CHU TRÌNH HAMILTON TRÊN ĐỒ THỊ G


7. [THUẬT TOÁN ĐỒ THỊ / CODE C++] THUẬT TOÁN EULER - TÌM ĐƯỜNG ĐI EULER TRÊN ĐỒ THỊ G (VỚI ĐỒ THỊ NỬA EULER)


8. [THUẬT TOÁN ĐỒ THỊ / CODE C++] THUẬT TOÁN DIJKSTRA - TÌM ĐƯỜNG ĐI NGẮN NHẤT TỪ ĐỈNH D ĐẾN ĐỈNH C TRÊN ĐỒ THỊ G.


9. [C\C++] CÀI ĐẶT THUẬT TOÁN DUYỆT ĐỒ THỊ (DFS, BFS) [LÝ THUYẾT ĐỒ THỊ]


10. [THUẬT TOÁN ĐỒ THỊ / CODE C++] KIỂM TRA TÍNH LIÊN THÔNG CỦA ĐỒ THỊ G


Tài liệu tham khảo:


1. Bài giảng: Toán rời rạc - PTIT   [Download]

2. Tài liệu: Giải thuật đồ thị - ĐHQG  [Download]

3. Giáo trình: Toán rời rạc  [Download]



[Kỹ thuật đồ họa] Học kỹ thuật đồ họa qua các ví dụ

Học kỹ thuật đồ họa qua các ví dụ

Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính. Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vực như đại số, hình học giải tích, hình học họa hình, quang học,... và kĩ thuật máy tính, đặc biệt là chế tạo phần cứng (các loại màn hình, các thiết bị xuất, nhập, các vỉ mạch đồ họa...).

[Kỹ thuật đồ họa] Học kỹ thuật đồ họa qua các ví dụ


Theo nghĩa rộng hơn, đồ họa máy tính là phương pháp và công nghệ dùng trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh trên màn hình bằng máy tính. Đồ họa máy tính hay kĩ thuật đồ họa máy tính còn được hiểu dưới dạng phương pháp và kĩ thuật tạo hình ảnh từ các mô hình toán học mô tả các đối tượng hay dữ liệu lấy được từ các đối tượng trong thực tế. Thuật ngữ "đồ họa máy tính" (computer graphics) được đề xuất bởi một chuyên gia người Mĩ tên là William Fetter vào năm 1960. Khi đó ông đang nghiên cứu xây dựng mô hình buồng lái máy bay cho hãng Boeing. William Fetter đã dựa trên các hình ảnh 3 chiều của mô hình người phi công trong buồng lái để xây dựng nên mô hình buồng lái tối ưu cho máy bay Boeing. Đây là phương pháp nghiên cứu rất mới vào thời kì đó. Phương pháp này cho phép các nhà thiết kế quan sát một cách trực quan vị trí của người lái trong khoang buồng lái. William Fetter đã đặt tên cho phương pháp của mình là computer graphics... 

Theo wikipedia.

Đồ họa máy tính cũng là môn học bắt buộc đối với sinh viên khối ngành CNTT nói chung. Môn học giúp cho sinh viên có cái nhìn tổng quan về các kỹ thuật đồ họa, các thuật toán đồ họa cơ bản từ đó hình thành tư duy thiết kế, kiến tọa đồ họa trên máy tính. Đô họa máy tính được ứng dụng trong rất nhiều lĩnh vực khác nhau, như kiến tạo đồ họa, xử lý đồ họa, các công nghệ mô phỏng, giả lập, các trò chơi điện tử, điện ảnh và du lịch.

Tuy nhiên để học tốt học phần này sinh viên cần có nền tảng lập trình vững vàng, có kỹ năng đọc hiểu và thiết kế thuật toán cho máy tính. Bài viết này mong muốn mang đến cho các bạn một cách tiếp cần môn học thông qua các ví dụ từ cơ bản đến nâng cao, giúp cho các bạn hiểu kỹ hơn về tư duy kiến tạo đồ họa trong máy tính.

Một số ví dụ tham khảo (sử dụng C/C++)

1. [ KỸ THUẬT ĐỒ HỌA MÁY TÍNH ] VÍ DỤ VẼ TAM GIÁC, SỬ DỤNG THUẬT TOÁN VẼ ĐOẠN THẲNG THÔNG THƯỜNG [ C\C++ ]


2. [ C\C++ ] THUẬT TOÁN DDA_LINE - VẼ ĐOẠN THẲNG [ KỸ THUẬT ĐỒ HỌA MÁY TÍNH ]

8. [ĐỒ HỌA TRONG C\C++] SỬ DỤNG CÁC HÀM ĐỒ HỌA THÔNG DỤNG TRONG C\C++ [C\C++]


9. BÀI TẬP +ĐÁP ÁN LÝ THUYẾT ĐỒ HỌA MÁY TÍNH
 

Tài liệu tham khảo:


1. Bài giảng: Kỹ thuật đồ họa máy tính - PTIT  [Donwload]

2. Tài liệu: Lý thuyết đồ họa  [Donwload]

3. Tài liệu: Kỹ thuật đồ họa  [Donwload]

4. Slide: Thuật toán trong đồ họa  [Donwload]



#

[Tự học Android] Sử dụng Shared Preferences trong Android

Sử dụng Shared Preferences trong Android

 

Trong bài tập này Tôi sẽ trình bày về cách lưu trạng thái của ứng dụng (liên quan tới Shared Preferences) và cách tạo các màn hình cấu hình (liên quan tới Shared Preference Change Listeners)

———————————————————


*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]


-A- Cách lưu trạng thái của ứng dụng:

Bước 1:

– Gọi hàm getSharedPreferences, hàm này trả về SharedPreferences và nó có 2 đối. Đối số 1 là tên tập tin để lưu trạng thái, đối số 2 là kiểu lưu. Chú ý là đối số 1 ta chỉ ghi tên tập tin (không cần ghi phần mở rộng, vì phần mở rộng mặc nhiên của nó là .xml khi ta lưu thành công), đối số 2 thường ta để là MODE_PRIVATE:

SharedPreferences pre=getSharedPreferences(“my_data“, MODE_PRIVATE);

Bước 2:

– Tạo đổi tượng Editor để cho phép chỉnh sửa dữ liệu:

SharedPreferences.Editor edit=pre.edit();

Bước 3:

– Đưa dữ liệu muốn lưu trữ vào edit bằng các phương thức edit.putXXX(“key”,”value”);

Tùy vào kiểu dữ liệu ta muốn lưu trữ mà XXX được thay thế bởi các kiểu dữ liệu phù hợp:

editor.putString(“user”, “drthanh”);

editor.putString(“pwd”, “hoilamgi”);

editor.putBoolean(“checked”, true);

Bước 4:

– Lưu trạng thái bằng cách gọi dòng lệnh:

editor.commit();

————————————————————————————————————————–

Sau khi bạn làm đúng 4 bước trên thì chương trình sẽ lưu được trạng thái, như trên đã nói mặc định phần mở rộng là .xml (tức là trạng thái được lưu dưới định dạng tập tin XML). Bên trên ta đặt tên là my_data có nghĩa là chương trình sẽ tạo ra tập tin my_data.xml (bạn mở DDMS lên để xem) – tự động nó sẽ lưu vào thư mục shared_prefs như hình bên dưới:

30_SharedPreferences_5

————————————————————————————————————————–

-B- Cách đọc trạng thái đã lưu:

Rất đơn giản

Bước 1:

– Gọi hàm getSharedPreferences để trả về đối tượng SharedPreferences (giống như phần lưu trạng thái mà Tôi nói ở trên)

SharedPreferences pre=getSharedPreferences (“my_data“,MODE_PRIVATE);

Bước 2:

– Gọi các phương thức getXXX(“key”,giá trị mặc định) để lấy các giá trị lúc trước được lưu

boolean bchk=pre.getBoolean(“checked”, false); //đối số 2 Tôi để false là giá trị mặc định khi nó tìm không thấy key =checked
String user=pre.getString(“user”, “”);//lấy giá trị được lưu trong key=user, nếu không thấy thì gán giá trị mặc định là chuỗi rỗng
String pwd=pre.getString(“pwd”, “”);//giống trên

————————————————————————————————————————–

******** Gợi ý *******

– Lưu và đọc trạng thái bạn nên viết thành các hàm riêng biệt cho dễ sử dụng

– Hàm lưu bạn gọi trong sự kiện onPause

– Hàm đọc bạn gọi trong sự kiện onResume.

******** END *******

Tôi sẽ làm ví dụ cụ thể dưới đây để bạn hiểu rõ hơn về lý thuyết:

Ví dụ 1: bạn muốn tạo một màn hình đăng nhập có checkbox cho phép lưu lại thông tin đăng nhập, lần sau khởi đội lại thì nó sẽ lấy lại thông tin nhập lúc trước để người sử dụng đỡ phải mất công nhập lại (biết về Shared Preferences), xem hình mình họa:

30_SharedPreferences_0

– Khi chọn nút đăng nhập, chương trình sẽ đóng Activity hiện tại và hiển thị Activity dưới đây:

30_SharedPreferences_2

– Chọn nút Thoát, chương trình tiếp tục đóng Activity này giúp tắt hẳn các Activity trong ứng dụng.

– Khởi động lại chương trình sẽ phải tự động load lại thông tin đăng nhập trước đó (Nếu khi đăng nhập có chọn “Lưu thông tin“).

– Bạn xem cấu trúc của Project:

30_SharedPreferences_4

– Layout XML của màn hình chính (activity_main.xml):

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity" >
 
<TextView
 android:id="@+id/textView1"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="#80FFFF"
 android:gravity="center"
 android:text="Đăng nhập hệ thống" />
 
<TableLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:stretchColumns="*"
 >
 
<TableRow
 android:id="@+id/tableRow1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/textView2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="User:" />
 
<EditText
 android:id="@+id/editUser"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:inputType="text"
 android:ems="10" >
 
<requestFocus />
 </EditText>
 </TableRow>
 
<TableRow
 android:id="@+id/tableRow2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 </TableRow>
 
<TableRow
 android:id="@+id/tableRow3"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<TextView
 android:id="@+id/textView3"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Pasword:" />
 
<EditText
 android:id="@+id/editPassword"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:ems="10"
 android:inputType="textPassword" />
 </TableRow>
 
<TableRow
 android:id="@+id/tableRow4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<CheckBox
 android:id="@+id/chksaveacount"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_column="1"
 android:text="Lưu thông tin" />
 </TableRow>
 
<TableRow
 android:id="@+id/tableRow5"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" >
 
<Button
 android:id="@+id/btnlogin"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_column="1"
 android:text="Đăng nhập" />
 </TableRow>
 </TableLayout>
 
</LinearLayout>

– Layout XML của activity_dang_nhap_thanh_cong.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".DangNhapThanhCongActivity" >
 
<TextView
 android:id="@+id/txtmsg"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="TextView"
 android:textSize="20sp" />
 
<Button
 android:id="@+id/btnThoat"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center"
 android:text="Thoát" />
 
</LinearLayout>

– Bạn xem Source code MainActivity.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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package tranduythanh.com;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
 
public class MainActivity extends Activity {
 Button btnlogin;
 EditText edituser,editpassword;
 CheckBox chksaveaccount;
 //đặt tên cho tập tin lưu trạng thái
 String prefname="my_data";
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 btnlogin=(Button) findViewById(R.id.btnlogin);
 edituser =(EditText)
 findViewById(R.id.editUser);
 editpassword=(EditText)
 findViewById(R.id.editPassword);
 chksaveaccount=(CheckBox)
 findViewById(R.id.chksaveacount);
 btnlogin.setOnClickListener(
 new View.OnClickListener() {
 public void onClick(View arg0) {
 doLogin();
 }
 });
 }
 /**
 * hàm đăng nhập hệ thống
 */
 public void doLogin()
 {
 finish();//đóng màn hình hiện tại
 Intent i=new Intent(this, DangNhapThanhCongActivity.class);
 //truyền dữ liệu qua màn hình mới
 i.putExtra("user", edituser.getText().toString());
 startActivity(i);//mở màn hình mới
 }
 @Override
 protected void onPause() {
 // TODO Auto-generated method stub
 super.onPause();
 //gọi hàm lưu trạng thái ở đây
 savingPreferences();
 }
 @Override
 protected void onResume() {
 // TODO Auto-generated method stub
 super.onResume();
 //gọi hàm đọc trạng thái ở đây
 restoringPreferences();
 }
 /**
 * hàm lưu trạng thái
 */
 public void savingPreferences()
 {
 //tạo đối tượng getSharedPreferences
 SharedPreferences pre=getSharedPreferences
 (prefname, MODE_PRIVATE);
 //tạo đối tượng Editor để lưu thay đổi
 SharedPreferences.Editor editor=pre.edit();
 String user=edituser.getText().toString();
 String pwd=editpassword.getText().toString();
 boolean bchk=chksaveaccount.isChecked();
 if(!bchk)
 {
 //xóa mọi lưu trữ trước đó
 editor.clear();
 }
 else
 {
 //lưu vào editor
 editor.putString("user", user);
 editor.putString("pwd", pwd);
 editor.putBoolean("checked", bchk);
 }
 //chấp nhận lưu xuống file
 editor.commit();
 }
 /**
 * hàm đọc trạng thái đã lưu trước đó
 */
 public void restoringPreferences()
 {
 SharedPreferences pre=getSharedPreferences
 (prefname,MODE_PRIVATE);
 //lấy giá trị checked ra, nếu không thấy thì giá trị mặc định là false
 boolean bchk=pre.getBoolean("checked"false);
 if(bchk)
 {
 //lấy user, pwd, nếu không thấy giá trị mặc định là rỗng
 String user=pre.getString("user""");
 String pwd=pre.getString("pwd""");
 edituser.setText(user);
 editpassword.setText(pwd);
 }
 chksaveaccount.setChecked(bchk);
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.activity_main, menu);
 return true;
 }
}

– Bạn xem source code DangNhapThanhCongActivity.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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package tranduythanh.com;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class DangNhapThanhCongActivity extends Activity {
 
TextView txtMsg;
 Button btnThoat;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_dang_nhap_thanh_cong);
 txtMsg=(TextView) findViewById(R.id.txtmsg);
 btnThoat=(Button) findViewById(R.id.btnThoat);
 btnThoat.setOnClickListener(new OnClickListener() {
 
 @Override
 public void onClick(View arg0) {
 // TODO Auto-generated method stub
 finish();
 }
 });
 
 Intent i=getIntent();
 txtMsg.setText("Hello : "+i.getStringExtra("user"));
 }
 
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.activity_dang_nhap_thanh_cong, menu);
 return true;
 }
 
}

– Như vậy là đã xong, bạn đã biết được cách lưu trạng thái. Chú ý là lưu trạng thái chỉ lưu Primitive Data, không cho phép lưu Object Serialize.

– Bạn click vào đây để tải coding mẫu: http://www.mediafire.com/download/4e4lyykdukgof82/LearnSharedPreferences.rar

————————————————————————————————————————–

-B- cách tạo Shared Preference Change Listeners để tạo giao diện cấu hình:

Bước 1:

– Tạo một Project Android bất kỳ, sau đó tạo thêm một layout PreferenceScreen:

30_SharedPreferences_6

– đặt tên tùy ý (ở đây Tôi đặt tên mypreferencelayout)

– Không giống như layout bình thường, preference screen sẽ nằm trong thư mục xml như hình bên dưới:

30_SharedPreferences_7

– Tiến hành tạo Checkbox giống như trên. (nó có nhiều control khác, tùy vào nhu cầu)

Bước 2:

– Tạo Activity cho Prefence layout trên (Kế thừa từ PreferenceActivity):

30_SharedPreferences_8

Bước 3:

– Cấu hình Manifest XML cho Preference Activity ở trên:

30_SharedPreferences_9

Bước 4:

– Tiến hành sửa MainActivity để sử dụng Preference Activity (Đăng ký OnSharePreferenceChangeListener):

30_SharedPreferences_10

– Bạn có thể xem kết quả như bên dưới:

30_SharedPreferences_11

————————————————————————————————————————–

Ví dụ 2:

– Bạn cố gắng tự xem lại lý thuyết và đọc coding để hiểu. Ví dụ này Tôi không giải thích coding.

– Hay bạn cần tạo ra các màn hình để cấu hình (giống như màn hình Setting của thiết bị chẳng hạn – cần biết Shared Preference Change Listeners):

30_SharedPreferences_1

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]


# Nguồn duythanhcse

Tìm kiếm nội dung khác: