Pages

Saturday, November 22, 2014

TỔNG QUAN VỀ TÌM KIẾM TRONG ANDROI

TÔNG QUAN VỀ TÌM KIẾM TRONG ANDROID

Tìm kiếm là một đặc tính trong android. Người dùng có thể tìm kiếm bất kỳ dữ liệu đang chứa trên thiết bị android hoặc trên internet. Để tạo ra một trãi nghiệm tìm kiếm cho những người sử dụng, Android cung cấp một framework tìm kiếm giúp bạn thực thi tìm kiếm cho ứng dụng của bạn.

Search Framework đưa ra 2 mẫu tìm kiếm: search dialog hoặc search widget(SearchViewmà bạn có thể nhúng vào activity layout của bạn. Trong cả 2 loại, hệ thống Android sẽ tương trợ công việc thực thi tìm kiếm của bạn bằng cách cung cấp các truy vấn tìm kiếm cho một hoạt động cụ thể  thực thi những tìm kiếm. Bạn cũng có kích hoạt một trong 2 loại tìm kiếm search dialog hoặc widget để cung cấp gợi ý tìm kiếm khi người dùng gõ thông tin tìm kiếm.

Một khi bạn đã thiết lập một trong 2 loại tìm kiếm Search Dialog hoặc Search Widget, bạn có thể:
  • Kích hoạt voice search ( tìm kiếm bằng giọng nói)
  • Cung cấp gợi ý tìm kiếm dựa trên những truy vấn gần đây của người dùng
  • Cung cấp custom gợi ý tìm kiếm mà phù hợp với những kết quả trong dữ liệu ứng dụng của bạn
  • Đưa ra những gợi ý tìm kiếm của ứng dụng trong system-wide Quick Search Box

Lưu ý: Search framework không cung cấp APIs để tìm kiếm dữ liệu của bạn. Để thực thi một tìm kiếm, bạn cần thiết sử dụng các APIs thích hợp với dữ liệu của bạn. Cho ví dụ, nếu dữ liệu của bạn được lưu trử trong một SQLite database, bạn nên sử dụng android.database.sqlite APIs để thực thi tìm kiếm.

Ngoài ra, không có đảm bảo rằng một thiết bị cung cấp một một nút tìm kiếm chuyên dụng nào để gọi tìm kiếm trong ứng dụng của bạn. Khi sử dụng search dialog hoặc một custome interface, bạn phải cung cấp một nút tìm kiếm trong giao diện của bạn để kích hoạt interface tìm kiếm. Thông tin chi tiết, xem  Invoking the search dialog. 

Những tài liệu sau chỉ bạn làm thế nào để sử dụng framework của Android để thực thi tìm kiếm:
Creating a Search Interface : tạo một Search Interface
Làm thế nào để thiết lập  ứng dụng của bạn để sử dụng tìm kiếm dialog hoặc search widget.
Adding Recent Query Suggestions : Thêm Những gợi đã truy vấn gần đây nhất
Làm thế nào để cung cấp những gợi ý dựa trên những truy vần trước đây được sử dụng.
Adding Custom Suggestions : Custom một gợi ý tìm kiếm
Làm thế nào để cung cấp các gợi ý tìm kiếm dựa trên dữ liệu custome từ ứng dụng của bạn và cũng cung cấp cho chúng trong system-wide Quick Search Box
Searchable Configuration : Cấu hình search
Một tài liệu tham chiếu cho việc cấu hình file tìm kiếm (mặc dù các tài liệu khác cũng thảo luận cấu hình file trong các hình vi cụ thể)

TỰ HỌC ANDROI

MENU

Monday, November 3, 2014

WHAT 'S NEW ?

1. Nâng câp giao diện


2. Chỉnh sửa dữ liệu Kanji
3. Thêm chức năng xáo trộn từ vựng khi học

HƯỚNG DẪN


  1. Không tìm thấy nút menu chọn cấp độ ?
  2. Hướng dẫn sử dụng chương trình 
  3. Hướng dẫn bằng video

Không tìm thấy nút menu trong ứng dụng

Có một số điện thoại -  smart phone  có nút menu được thiết kế cứng trên máy. Cho nên một số bạn không tìm thấy menu "mềm" trong ứng dụng thì hãy vào google tìm với từ khóa : android menu button hoặc là bấm vào link sau : tìm nút menu

Sunday, June 22, 2014

HƯỚNG DẪN SỬ DỤNG CHƯƠNG TRÌNH HỌC TỪ VỰNG TIẾNG NHẬT

Lần đầu tiên khi cài đặt và khởi động chương trình bạn sẽ bắt gặp màn hình như sau:

- CHƯƠNG TRÌNH ĐƯỢC THIẾT KẾ THEO 2 CÁCH HIỂN THỊ, VẬY LÀM THẾ NÀO ĐỂ CHỌN CÁCH HIỂN THỊ ?
1. Vuốt nhẹ mép phải màn hình sang trái để hiển thị menu phải:



- LÀM THẾ NÀO ĐỂ CHỌN BÀI HỌC :
Tương tự như trên, nhưng làm ngước lại từ mép trái sang phải. Menu sẽ hiện thị như ảnh sau:


 - LÀM THẾ NÀO ĐỂ HỌC:

1. Vuốt nhẹ trái hoặc phải ở giữa màn hình để chuyển từ.
2. Bấm nút lui-tới để chuyển từ
3. Bấm nút play để tự động chuyển từ và phát ấm ( âm chuẩn )
4 . Bấm nút sáo trộn từ để xáo trộn trật tự từ.
5. Tắt mở , ẩn hiển Kanji, nghĩa , Hiragana bằng các nút check box bên phải dùng để luyện nhớ :
Ví dụ : Tắt nghĩa rồi trượt từng từ xem có nhớ nghĩa không .....
______________________________________________________________________________
NẾU BẠN CHỌN HIỂN THỊ THEO TỪNG TỪ 

MÌNH SẼ GIẢI THÍCH MỘT SỐ ĐẶC ĐIỂM CỦA CHƯƠNG TRÌNH THEO SỐ THỨ TỰ TRONG ẢNH SAU :


1 : Chọn số từ muốn học, ví dụ bạn chọn 10 thì chương trình sẽ lấy 10 từ trong bài 1, cấp độ N3 chẳng hạn.
2 : Là số lượng mà bạn có thể chọn, đặc biệt " Từ Đánh Dấu ☆ " nếu bạn chọn mục này những từ hay quên khó mà bạn đánh dấu trong khi học để học lại ( của N3 chẳng hạn, cấp độ mà bạn đang học ) chương trình  sẽ chọn lọc ra để bạn có thể ôn lại, học lại.
3 : Nút bấm trược lui tới số lượng từ mà bạn đã chọn ở (1 và 2).
4 : Phát ấm ( âm này chuẩn của người Nhật , không phải robot đọc như google, nên bạn yên tâm phần này )
5 : Là số giây chờ khi bạn sử dụng chức năng (6).
6 : Chức năng này tự bấm lui tới cho bạn.
7 : Bạn có thể tùy chọn hiển thị, ẩn hoặc hiện ví dụ, chử kanji, hiragana, ý nghĩa của từ. Mục đích của chắc năng này là: khi bạn cố gắng nhớ nghĩa của một từ bạn có thể ẩn nghĩa của từ đó rồi bấm trượt lụi tới và cố gắng nhớ ra nghĩa. Tương tự, bạn có thể ẩn Hiragana để xem chử Kanji đó viết hiragana như thế nào.... 
8 : Đây chính là chức năng có liên quan đến chức năng ( 2 ). Nếu bạn bấm vào dấu ☆ này, lập tức nó sẽ được tô vàng hoặc không tô màu. Nếu nó được tô màu vàng, điều này có nghĩa bạn đã đánh dấu nó ( lưu ý : chỉ sử dụng chức năng này khi bạn cảm thấy từ đó khó nhớ, hoặc bạn muốn học lại trong ngày kế tiếp , .... ). Nếu bạn muốn huy đánh dấu cho riêng từ đó hãy bấm vào nó một lần nữa ( ngôi sao không có màu vàng tất là không được đánh dấu ).
9 : Nếu bạn bấm vào đây phần Menu sẽ được hiển thị bào gồm :  Chọn cấp độ; Hủy đánh dấu ☆; Hồi Phục Từ Ẩn; Trợ Giúp; About.
10 : Bạn bấm vào đây danh sách bài học sẽ hiển thị : Bài 1 , Bài 2 , Bài 3, .......

_______________________________________________________________________________
NẾU BẠN CHỌN HIỂN THỊ THEO DANH SÁCH :

1 : Thanh nằm ngang màu cam ở dưới cùng cho phép bạn hiển thị hoặc ẩn chử kanji, hiragana, ví dụ, ý nghĩa .
2 : Bạn bấm vào để đánh dấu từ khó học, từ muốn học lại.....
3 : Nếu bạn bấm đây những từ mà bạn đã đánh dấu sẽ hiển thị, từ không được đánh dấu sẽ không hiển thị, lúc này ngôi sao sẽ chuyển thành trắng hoàn toàn, nếu bạn bấm thêm một lần nữa ngôi sẽ sẽ trở lại như củ ( trắng viền xung quanh như ảnh ) và tất cả các từ sẽ hiển thị trở lại, kể cả từ đã được đánh dấu .

VĂN ÔN VÕ LUYỆN
CHÚC CÁC BẠN HỌC TỐT!

Friday, June 20, 2014

Lỗi : Data exceeds UNCOMPRESS_DATA_MAX

Khi phát trển một ứng dụng Android, bất kỳ file dữ liệu nào, file ảnh hoặc XML... mà chúng ta sử dụng trong ứng dụng đều được đóng gói vào gói ứng dụng ( application package = APK )  để phân phân phối, phân bổ. Bạn có biết, Android Asset Packaging Tool, hay được gọi tắt là aapt, chịu trách nhiệm cho việc tạo gói đó ( gói = bundle), bạn có thể xem gói đó như là một file ZIP với bố trí, thiết kế riêng để cho hệ điều hành Android có thể hiểu. Khi ứng dụng của bạn được cài đặt, file APK được đặt vào một ví trí trên file hệ thống của thiết bị ( filesystem ).

Trong một phần của việc chuẩn bị cho file APK, aapt sẽ nén các file trong assest để tiết kệm không gian cho thiết bị. Aapt sẽ quyết định nén hay không dựa trên phần đuổi của file. Mãng sau là danh sách các phần đuôi file mặc định là không được nén : 
static const char* kNoCompressExt[] = {
    ".jpg", ".jpeg", ".png", ".gif",
    ".wav", ".mp2", ".mp3", ".ogg", ".aac",
    ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet",
    ".rtttl", ".imy", ".xmf", ".mp4", ".m4a",
    ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2",
    ".amr", ".awb", ".wma", ".wmv"
};

Trên điện thoại hệ điều hành 2.2/2.3 các file lớn hơn 1M APK không đọc được, nói đúng ra thì nó không chịu đọc. Thông thường các bạn hay đặt phần đuôi mở rộng của file dữ liệu là , ví dụ : test.db , test.sqlite ... những loại đuôi file này sẽ được kiểm tra kích cở ( size ) trước khi APK đọc và lấy nó, và được nhiên nếu file đó lớn hơn 1M thì xin thưa nó không chịu đọc. Để khắc phục điều này trên phiên bản 2.2/2.3 Android thì chúng ta nên đặt lại tên file được liệt kê như mãng kNoCompressExt[] trên : test.mid chẳng hạn.OK, vậy là ta đã giải quyết được vấn đề.

Thursday, April 17, 2014

Fragment trong Android

Fragment


Một Fragment đại diện cho một hành vi hoặc một phần của user interface trong một activity.
  Bạn có thể kết hợp nhiều fragments trong một activity để xây dựng một multi-panen (đa khung)  UI và sử dụng lại một fragment trong nhiều activity. Bạn có thể nói một fagment như một  phần modular của   một activity.
  - Fragment có lifecycle riêng, nhận sự kiện input riêng của nó.
  - Fragment có thể thêm hoặc xóa khi activity đang chạy.
  - Fragment phải luôn luôn được nhúng trong activity. Vòng đời của fragment bị ảnh hưởng trực tiếp bởi vòng đời chủ của activity. Cho ví dụ:
   + Khi một activity dừng lại , tất cả các fragment trong nó đều dừng lại.
   + Khi một activity bị hủy, tất cả các fragment đều bị hủy.
  - Trong khi activity đang chạy( trong trạng thái resumed ), chúng ta có thể thao tác mỗi fragment một cách không phụ thuộc chẳng hạn như thêm và xóa các fragment.
 - Khi thực hiện chẳng hạn như một transaction của fragment bạn cũng có thể thêm nó vào back stack được quản lý bởi activity - mỗi hạng mục back stack  trong activity là một record của fragment transaction đã xảy ra. Back stack cho phép user đảo ngược một fragment transaction, tức là navigate backward, bởi việc bấm nút Back.
    ---------------------------------------------------------------------------------------
  - Khi ta thêm một fragment như là một phần layout của activity chúng ta, nó tồn tại trong ViewGroup
    bên trong cấp bật view của activity và fragment sẽ định nghĩa layout riêng của nó.
  - Chúng ta có thể insert một fragment vào activity layout bằng cách khai báo một fragment
    trong layout của activity, như là phần tử <fragment>, hoặc từ code của ứng dụng bằng cách add nó vào
    một GroupView đang tồn tại.
  - Một fragment không nhất thiết là một phần của activity layout; bạn cũng có thể sử dụng một fragment
    mà không có giao diện riêng của nó ( layout ) như là một phần hoạt động vô hình của activity.
    ---------------------------------------------------------------------------------------
    Design Philosophy: Triết lý thiêt kế
    Android giới thiệu fragment trong Android 3.0(API 11), chủ yếu để hổ trợ dynamic và flexible thiết kế         trên màn hình rộng ( large screens ), chẳng hạn như tablets. bởi vì màn hình của tablet lớn hơn nhiều               handset, có nhiều chỗ combine và thay thế những thành phần UI với nhau. Fragment cho phép bạn thiết kế     như vậy mà không cần thay đổi phức tạp tới hện thống phân cấp view. Bởi việc chia layout của một               activity thành những fragment, bạn có thể thay đổi sự xuất hiện của activity tại thời điển runtime(đang chạy ) và bảo lưu những thay đổi trong back stack được quản lý bởi activity.
    Cho ví dụ, một ứng dụng mới có thể sử dụng một fragment show một list của các article phía bên trái
    và một fragment display một ariticle phía bên phải - cả 2 fragments trong một activity,nằm cạnh nhau,
    mỗi một fragment có riêng các phương thức lifecycle callback và xử lý những user input events của chúng.
    Vì thế,  thay vì sử dụng một activity để select một article và một activity khác để đọc article, người dùng
    có thể chọn article và đọc nó tất cả bên trong một activity, as illustrated in the tablet layout in figure 1:
    ----------------------------------------------------------------------------------------
    Bạn nên thiết kế mỗi fragment như một modular và một thành phần của activity có thể sử dụng lại.
    Đó là, bở vì mỗi fragment định nghĩa layout cho riêng nó và những hành vi cho riêng nó và
    những callback lifecycle cho riêng nó, bạn có thể dùng một fragment trên nhiều activity, vì thế bạn
    nên thiết kế để sử dụng lại và bỏ qua việc điều khiển một fragment từ một fragment khác. Đây là điều
    đặc biệt quang trọng bởi vì một moduler fragment cho phép bạn thay đổi fragment của bạn kết hợp với
    những kích cở màn hình khác nhau. Khi thiết kế ứng dụng bạn để hổ trợ cả tablets và handset, bạn có thể
    sử dụng lại fragment của bạn trong nhiều cấu hình layout khác nhau để tối ưu kinh nghiệm người dùng  dựa trên  những không gian màn hình khả dụng. Cho ví dụ, trên một thiết hị handset, nó có thể cần thiết để tách
    biệt các fragment để cung cấp một single-pane UI khi nhiều hơn một không thể lấp vừa đủ vào một
    activity có không gian chật hẹp :
    ----------------------------------------------------------------------------------------
    Cho ví dụ,  ứng dụng có thể nhúng 2 fragments trong activity A
    khi chạy trên một thiết bị tablet-sized. Tuy nhiên, trên một màn hình handset-sized, không có đủ chỗ
    cho cả 2 fragment, vì thế Activity A sẽ bao gồm chỉ một Fragment cho list của các article, và khi
    người dùng select một article, nó chạy activity B,cái mà bao gồm fragment thứ 2 để đọc article. Do đó,
    ứng dụng có thể hổ trợ cả tablet và handset thì phải sử dụng lại những fragment trong các combinations
    khác nhau, như đã chứng minh ở  figure 1.

    Để có nhiều thông tin về thiết kế ứng dụng của bạn với các fragment khác nhau kết hợp với nhiều cầu hình
    màn hình khác nhau , xem hướng dẫn : http://developer.android.com/guide/practices/tablets-and-handsets.html
 
Tạo một Fragment 
 
    Để tạo một fragment,bạn phải tạo một Subclass của lớp Fragment (hoặc một subclass của nó).
    Fragment class có code phần nhiều trông giống như của một Activity. Nó chứa những phương thức
    callback tương tự như của activity, như là onCreate() onStart(), onPause(), và onStop().
    Trong thực tế, nếu bạn convert một ứng dụng android sang để sử dụng fragment, bạn có thể chỉ đưng giản
    di chuyển code nhưng phương thức callback của các activity sang riêng từng phương thức callback của fragment.
 
     - Thông thường, bạn nên thi hành ít nhất những phương thức callback sau:
     onCreate()
      Hệ thống gọi phương thức nay khi đang tạo fragment. Bên trong thực thi của bạn, bạn nên khởi tạo
      những thành phần cốt yếu của fragment mà bạn muốn giử lại khi fragment dừng(paused) hoặc stoped,
      hoặc resumed.
     onCreateView()
      Hệ thống sẽ gọi hàm này khi nó dành thời gian cho việc vẽ giao diện người dùng cho lần đầu tiên
      Để vẻ một UI cho fragment của bạn bạn phải return một view từ phương thức này mà đó là root của
      layout của fragment. Bạn có thể return null nếu fragment không cung cấp một UI nào cả.
     onPause()
      hệ thống gọi phương thức này khi sự biểu thị đầu tiên chi ra rằng user đang rời khỏi fragment(mặc dầu vậy nó không luôn luôn có nghĩa là fragment đang bị destroyed). Đây là thông thường nơi mà bạn nên
      commit bất kỳ thay đổi nào mà còn duy trì cho session hiện tại của user cho sau này.
      (Bởi vì user có thể không quay trở lại ).
   
     Hầu hết các ứng dụng nên thực thi ít nhất 3 phương thức đó cho mỗi fragment,nhưng có vài phương thức
     callback khác cũng nên sử dụng để xử lý những giai đoạn khác nhau của fragment lifecycle.
     tất cả các phương thức lifecycle callback được thảo luận trong:
     ------------------------------------------------------------------------------
     Cũng có vài subclass mà bạn muốn mở rộng, thay vì lớp Fragment cơ bản:
   
     DialogFragment
      Hiển thị một hộp thoại nỗi.Việc sử dụng lớp này để tạo một dialog là một thay thế tốt
      để sử dụng những phương thức hổ trợ dialog trong lớp Activity, bởi vì bạn có thể sát nhập
      một fragment dialog vào backstack của các fragment quản lý bởi activity, cho phép user
      có thể return lại một dismissed fragment.
     ListFragment
      Hiển thị một list items được quản lý bởi một adapter(Chẳng hạn như một SimpleCursorAdapter)
      tương tự với ListActivity.Nó cung cấp vài phương thức để quản lý một list view, chẳng hạn như
      onListItemClick() callback để xử lý những sự kiến click.
   
     PrefrenceFragment
      Hiển thị hệ thông cấp bật của đối tượng Preference như là một list, tương tự như PreferenceActivity.
      Điều nay hữu dụng khi tạo một "setting" activity cho ứng dụng của bạn.

    Thêm một user interface 

     Một fragment luôn luôn được sử dụng như một phần user interface của activity và đóng góp layout của
     nó vào Activity.
   
     Để cung cấp một layout cho một fragment, bạn phải thực thi trên phương thức callback onCreateView()
     cái mà hệ thống Android gọi tại thời điểm fragment vẽ layout của nó.
     Khi bạn thực thi phương thức này bạn phải retrun lại một view mà đó là root layout của fragment.
   
     ||Note: Nếu fragment của bạn là một lớp con của ListFragment,mặc định sẽ return lại ListView từ
     ||onCreateView(), vì thế bạn không cần thực thi nó.
   
     Để return một layout từ onCreateView(), bạn có thể inflate nó từ một layout resource đã định nghĩa
     trong XML.Để giúp đở bạn làm được như thế, onCreateView() cung cấp một LayoutInflater object.
   
     Cho ví dụ, dưới đây là một subclass của Fragment nó load một layout từ example_fragment.xml file:
   
     public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}
     Tham số container được chuyển tới onCreateView() là parent ViewGroup(từ layout của activity)
     trong cái fragment layout sẽ được insert.The tham số savedInstanceState là một Bundle mà cung cấp
     dữ liệu về các thể trước đó của fragment, nếu fragment đang được resumed(việc phục hồi trạng thái
     được thảo luần nhiều trong mục : http://developer.android.com/guide/components/fragments.html#Lifecycle)
   
     Phương thức inflate() lấy 3 đối số:
     - resource ID của layout bạn muốn inflate
     - ViewGroup là cha của inflate layout. Việc chuyển containor là quang trọng để cho hệ thống
     cung cấp những tham số layout tới root view của inflate layout, chỉ định bởi parent view
     trong cái mà nó sẽ làm...
     - Một boolean chỉ ra rằng có hay không một layout đã inflate nên đính kèm vào ViewGroup(tham số thứ 2)
     suốt quá trình inflate.(trong trường hợp này,cái này false bởi vì hệ thống đã insert 
     layout vào containor - nếu chuyển true sẽ tạo dư thừa view group trong final layout.)
   
     Bây giờ bạn đã thấy thế nào để tạp một fragment mà cung cấp một layout.Tiếp theo bạn cần thêm
     một fragment vào activity của bạn.
    
Thêm một fragment vào activity 

     Thông thường, một fragment góp phần tới giao diện của activity chủ, cái mà được nhúng như
     một phần phân cấp view của activity. Có 2 cách có thể thêm fragment đến activity layout:
   
     - Khai báo fragment bên  trong file layout của activity.
     - Add Fragment vào một ViewGroup đag tồn tại.
      Tại thời điểm activity đang chạy, bạn có thể add một fragment vào activity layout của bạn.
       đơn giản là chỉ định ViewGroup để đặt fragment của bạn.
      Để tạo một fragment transaction trong activity của bạn( chẳng hạn như add, remove hoặc thay thế
       một fragment ) bạn phải sử dụng APIs từ lớp FragmentTransaction. Bạn có thể lấy một cá thể
       của lớp FragmentTransaction từ Activity của bạn như sau :
       ------------------------------------------------------------------
       | FragmentManager fragmentManager = getFragmentManager()
| FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
     ------------------------------------------------------------------
      Bạn có thể add một fragment sử dụng phương thức add(),chỉ định fragment và view để add.
      ví dụ như :
       ------------------------------------------------------------------
       | ExampleFragment fragment = new ExampleFragment();
| fragmentTransaction.add(R.id.fragment_container, fragment);
| fragmentTransaction.commit();
Tham số đầu tiên chuyển tới add() là ViewGroup để lưu trử fragment,được chỉ định bởi ID từ
resource, tham số thứ 2 là fragment.
Kể từ khi bạn đã tạo sự thay đổi với lớp FragmentTracsaction, bạn phải gọi commit() để
có hiệu lực.
------------------------------------------------------------------
------------------------------------------------------------
Adding a fragment without a UI (Thêm một fragment không có UI)
------------------------------------------------------------
Bạn có thể sử dụng fragment để cung cấp một xử lý nền (background) cho activity mà không
hiển thị một giao diện UI.
Để add một fragment mà không có UI, add fragment từ activity sử dụng add(Fragment, String)
(cung cấp một string "tag" duy nhất cho fragment, chứ không phải là view ID). Cách này sẽ
add một fragment, nhưng mà, bởi vì nó không được liên kết với với một view trong acvtivity layout,
nó sẽ không nhận cuộc gọi  từ onCreateView(). Vì thế bạn không cần thực thi phương thức đó.
Việc cung cấp một string tag cho fragment của bạn nó không nghiêm ngặt cho fragment không có UI
bạn cũng có thể cung cấp những string tag cho fragment có UI - nhưng nếu fragment không có UI
dó đó string tag là cách duy nhất để nhận ra nó.Nếu bạn muốn lấy lại fragment từ activity sau đó
bạn cần sử dụng findFragmentByTag().
Cho một ví dụ activity sử dụng fragment như một bacground worker, không có UI,xem :
ví dụ http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.html
----------------------------------------------------------------------------------------
Managing Fragments ( Quản lý Fragments )
----------------------------------------------------------------------------------------
Để quản lý fragment trong activity của bạn , bạn cần sử dụng FragmentManager. Để có được nó,
gọi getFragmentManager() từ activity của bạn.
Với Fragment bạn có thể làm :
- Có thể lấy những fragment đang tồn tại trọng activity, bằng findFragmentById() (đối với
những fragment cũng cấp UI trong activity layout) hoặc là findFragmentByTag() - cho những
fragment không cung cấp UI.
- Lấy fragments khỏi stack bằng popBackStatck() - Tương tự câu lệnh Back bởi user.
- Đăng ký sự kiện lắng nghe cho sự thay đổi của back stack, với addOnbackStackChangedListener().
---------------------------------------------------------------------------
Performing Fragment Transactions ( Thực hiện Fragment Transactions )
---------------------------------------------------------------------------
Một đặc tính đang chú ý về việc sử dụng các fragment trong activity là việc code thể add,
remove , replace và thực thi các thao tác khác với chúng, để đáp ứng với tương tác của người dùng
Với một loạt các thay đổi mà bạn commit tới activity được gọi bởi một transaction và bạn có
thể thực thi chúng bằng cách sử dụng các API trong FragmentTransaction. Bạn cũng có thể lưu mỗi
transaction vào một back stack được quản lý bởi activity, cho phép user navigate back thông qua
những thay đổi của các fragment( tương tự như navigate back thông qua các activitys).
Bạn có thể thu được một cá thể của FragmentTransaction từ FragmentManager như sau:
---------------------------------------------------------------------------
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
---------------------------------------------------------------------------
Mỗi một transaction là một tập các thay đổi mà bạn muốn thực thi tại một thời điểm.
Bạn có thể thiết lập tất cả các sự thay đổi cho một transaction sử dụng những phương
thức :
- add();
- remove();
- replace();
sau đó để cung cấp transaction tới Activitys, bạn phải gọi commit().
Trước khi gọi commit(), bạn có thể gọi addTobackStack(), để thêm transaction vào back stack.
back stack này được quản lý bởi activity và cho phép user quay trở lại những trạng thái fragment
trước đó, bằng cách bấm nút Back.
Cho ví dụ :
---------------------------------------------------------------------------------
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
---------------------------------------------------------------------------------
Còn tiếp .....