Bài tập 13: Thực hành về ListView trong Android P1

Bài tập 13: Thực hành về ListView trong Android P1
Thể loại:AndroidTrang chủ:SHOPCNTT
Sử dụng:hướng dẫnDung lượng:0 MB
Cập nhật:24-08-2013Ngôn ngữ:English
Nguồn:duythanhcsePassword:Không có
Phát hành:SHOPCNTTHỗ trợ:Không có
Yêu cầu:Windows XP SP2, Windows Vista, Windows 7

Thực hành về ListView trong Android P1

Bài tập 13: Thực hành về ListView trong Android P1 - shopcntt
Bài tập 13: Thực hành về ListView trong Android P1 ANDROID
5/5
3490 bài đánh giá 46 lượt tải
GIỚI THIỆU
Trong các bài tập trước các bạn đã được làm quen với nhiều control cơ bản, bài tập này bạn sẽ được làm quen với control nâng cao, cụ thể là ListView. Trong ứng dụng cần lưu trữ và hiển thị danh sách các thông tin đa phần chúng ta sài control ListView. Hiện tại bạn chỉ cần biết sử dụng ListView có sẵn của Android là được rồi, trong các bài tập tiếp theo Tôi sẽ hướng dẫn các bạn Custom Layout lại ListView (tự làm mới ListView theo ý mình).
- Bài tập này Tôi sẽ cung cấp nhiều cách hành xử với ListView, ứng với mỗi cách là có các ví dụ mẫu khác nhau, vì vậy các bạn nên cố gắng theo dõi và thực hành lại những ví dụ.
- Bạn hãy thực hành tốt 5 trường hợp Tôi trình bày dưới đây:
1) Trường hợp 1:- Sử dụng ListView control với mảng dữ liệu định sẵn.
-Trường hợp này Tôi đưa ra một ví dụ đơn giản là cho phép hiển thị mảng dữ liệu lên trên ListView, bạn xem hình minh họa:
13_lv_0
- Giao diện trên có 2 control:
+ListView : dùng để hiển thị mảng dữ liệu
+TextView có màu xanh lục: Dùng để hiển thị vị trí và giá trị của phần tử được chọn trong ListView
- Bạn tạo một Android Project tên là : Vidu_ListView_HardCode_Array, chọn layout phù hợp và kéo thả các control vào giao diện:
13_lv_1- Dưới đây là nội dung của activity_main.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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/txtselection"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="#dd0230dd"
 android:hint="Selected person here" />
 <ListView
 android:id="@+id/lvperson"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" >
 </ListView>
</LinearLayout>
-Đặt id cho Listview là lvperson (nhìn dòng lệnh 15 ở trên), bạn có thể định dạng thêm một số đặc tính khác nhưng trong bài tập này thì chưa cần thiết, chỉ cần hiển thị được dữ liệu lên giao diện là đã đạt yêu cầu.
- Bây giờ bạn mở MainActivity.java lên để viết code:
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
package tranduythanh.com;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 //1. Khởi tạo dữ liệu cho mảng arr (còn gọi là data source)
 final String arr[]={"Teo","Ty","Bin","Bo"};
 //2. Lấy đối tượng Listview dựa vào id
 ListView lv=(ListView) findViewById(R.id.lvperson);
 //3. Gán Data source vào ArrayAdapter
 ArrayAdapter<String>adapter=new ArrayAdapter<String>
 (this, android.R.layout.simple_list_item_1, arr);
 //4. Đưa Data source vào ListView
 lv.setAdapter(adapter);
 final TextView txt=(TextView) findViewById(R.id.txtselection);
 //5. Thiết lập sự kiện cho Listview, khi chọn phần tử nào thì hiển thị lên TextView
 lv.setOnItemClickListener(
 new AdapterView.OnItemClickListener() {
 public void onItemClick(AdapterView<?> arg0,
 View arg1,
 int arg2,
 long arg3) {
 //đối số arg2 là vị trí phần tử trong Data Source (arr)
 txt.setText("position :"+arg2+" ; value ="+arr[arg2]);
 }
 });
 }
}
- Tôi đã giải thích từng dòng lệnh ở bên trong code, giờ Tôi giải thích thêm về ArrayAdapter, bạn nhìn vào dòng lệnh 21.
ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1arr);
- Dữ liệu từ Data source (arr) sẽ được gắn vào  ArrayAdapter, ArrayAdapter sẽ gắn vào ListView.
- Bạn nhìn vào đối số đầu tiên của constructor ArrayAdapter : this, chính là context của Activity hiện tại, bạn có thể viết MainActivity.this (nếu bạn viết như thế này thì ở bất kỳ vị trí nào nó cũng hiểu là context của MainActivity, do đó các bạn nên viết như thế này để bạn có thể copy paste nó tới bất kỳ vị trí nào thì nó cũng hiểu)
- Đối số thứ 2 android.R.layout.simple_list_item_1 : bạn để ý  android Tôi tô màu xanh, đây chính là layout Listview mà được Android xây dựng sẵn, các bài tập kế tiếp ta sẽ tự xây dựng mà không sử dụng cái có sẵn này. Như vậy thì simple_list_item_1 lưu ở đâu? và bên trong nó như thế nào?. Nó được lưu trong SDK/platforms/android-api (x)/data/res/layout/simple_list_item_1.xml. Bạn có thể xem nội dung và vị trí của layout này một cách nhanh chóng bằng  đè phím Ctrl + click chuột vào dòng lệnh này, bạn sẽ thấy như bên dưới:
13_lv_2- Đối số thứ 3: chính là arr (data source), bạn có thể truyền vào ArrayList.
- Nhìn vào dòng lệnh 27 chỗ gán sự kiện cho ListView (bạn nhớ là chỉ cần gõ một vài ký tự đầu rồi nhấn Ctrl+ Space Bar thì các lệnh đằng sau sẽ tự động xuất hiện ra cho bạn):
+ Ta có interface AdapterView.OnItemClickListener, nó dùng để thiết lập sự kiện cho ListView, interface này có 1 phương thức trừu tượng là onItemClick nên ta override nó về xử lý trong này. Bạn cũng nhớ là chỗ này không có gõ bằng tay mà chỉ cần nhấn tổ hợp phím Ctrl + 1 chọn add unimplement method là nó tự xuất hiện. Ngoài ra nó còn nhiều sự kiện khác các bạn tự tìm hiểu thêm.
Bạn có thể tải code đầy đủ ở đây:http://www.mediafire.com/?uwy4lp0e1jt0mik
2) Trường  hợp 2: Sử dụng ListView với mảng dữ liệu được lưu trong Xml:
- Giao diện và xử lý sự kiện trong trường hợp này là y xì trường hợp 1. Chỉ khác ở chỗ là dữ liệu sẽ được load từ XML, nên Tôi chỉ hướng dẫn cách tạo String – Array trong XML và  cách load String-Array trong coding như thế nào.
- Bạn tạo một Android Project tên là: Vidu_ListView_Xml_Array
- Để tạo String – Array trong XML bạn làm như sau:
Bước 1: Bấm chuột phải vào thư mục values của Project/ chọn New/Android XML File:
13_lv_3Bước 2: Màn hình New Android XML hiển thị lên, bạn chọn thông số giống như hình bên dưới, đặt tên tập tin là mystrings.xml rồi nhấn nút Finish:
13_lv_4Xem kết quả khi bấm nút Finish và quan sát cho nhận xét:
13_lv_5Chú ý là ta cũng có thể thêm dữ liệu vào tập tin strings.xml, nhưng đây là ý đồ của Tôi, Tôi muốn hướng dẫn các bạn cách tạo 1 tập tin XML mới và thêm dữ liệu vào tập tin mới này luôn.
Bước 3: chọn tab Resource ở hình trên:
13_lv_6Bước 4: Bấm nút “Add…” ở màn hình trên để thêm String-Array:
13_lv_7
Ở màn hình trên bạn chọn String Array rồi nhấn OK:
Bước 5: Đặt tên cho String Array, sau khi nhấn OK thì màn hình bên dưới hiển thị ra, bạn đặt tên String Array này là myarray rồi nhấn ctrl+s để lưu:
13_lv_8
Bước 6: Thêm các phần tử vào String Array, tiếp tục bấm nút Add ở màn hình bên trên:
13_lv_9-Sau khi nhấn OK thì nó sẽ cho phép bạn nhập giá trị cho phần tử.
- Bạn cứ lặp liên tục thao tác ở bước 6 này, thêm bao nhiêu phần tử thì click từng đó lần Add, ở đây là Tôi thêm 3 phần tử, bạn xem hình:
13_lv_10
- Xem nội dung XML:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string-array name="myarray">
 <item >Trần Văn Tèo</item>
 <item >Nguyễn Thị Tẹt</item>
 <item >Hồ Văn Hiến</item>
 </string-array>
</resources>
- Như vậy bạn đã biết cách tao 1 tập tin XML và biết cách tạo String Array cũng như tạo các phần tử nằm bên trong nó, Bây giờ trong Coding ta sẽ dựa vào myarray để đọc toàn bộ dữ liệu từ XML ra. Bạn cũng chú ý là myarray khi bạn tạo ra ở trên thì nó cũng được tạo ra trong gen:
13_lv_11
- Như bạn thấy đó, trong coding ta sẽ dựa vào đây để lấy ra: R.array.myarray.
* Mở MainActivity.java lên:
- Như Tôi đã nói là mọi thứ nó y xì như trường hợp số 1, dó đó trong trường hợp này Tôi chỉ viết dòng lệnh đọc dữ liệu từ XML đổ về một Mảng (thay vì trường hợp 1 Tôi hardcode mấy phần tử khi khai báo mảng), còn các phần khác bạn tự làm giống trường hợp 1:
final String arr[]=getResources().getStringArray(R.array.myarray);
Tức là bạn thay thế dòng lệnh thứ 17 trong trường hợp 1 của MainActivity.java bằng dòng lệnh trên.
Thực thi ứng dụng bạn sẽ được kết quả như hình bên dưới:
13_lv_13
- Tôi nghĩ tới đây bạn đã thật sự hiểu trường hợp 2.
- Bạn có thể tải toàn bộ coding mẫu ở đây: http://www.mediafire.com/?168jsno9iq85qsc

0 comments:

Post a Comment