Fragment trong Android – Freetuts

Trong bài này tất cả chúng ta sẽ khám phá một khái niệm mới trong lập trình Android, đó là Fragments. Đây là module được sử dụng rất liên tục khi bạn kiến thiết xây dựng một ứng dụng Android thực tiễn, giúp chia màn hình hiển thị ra thành nhiều phần riêng không liên quan gì đến nhau .

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

Đầu tiên hãy xem khái niệm flagment là gì đã nhé .

I. Android Fragments là gì?

Fragment là phần module của phong cách thiết kế hoạt động giải trí ( activity ), được sử dụng để thể hiện hành vi ( activity ) của giao diện người dùng ( UI ) trong một activity. Bằng cách sử dụng những fragment, tất cả chúng ta hoàn toàn có thể tạo ra một phong cách thiết kế UI linh động, hoàn toàn có thể được kiểm soát và điều chỉnh dựa trên kích cỡ màn hình hiển thị của thiết bị như máy tính bảng, điện thoại cảm ứng mưu trí .

Ta có thể xây dựng multi-pane UI bằng cách kết hợp nhiều fragment. Fragment có riêng các phương thức callback trong vòng đời và chấp nhận các sự kiện đầu vào của chính nó.

Ngoài ra, ta cũng hoàn toàn có thể thêm hoặc xóa những fragment trong một activity trong khi activity đang chạy. Trong Android, fragment sẽ hoạt động giải trí như một activity phụ và tất cả chúng ta hoàn toàn có thể sử dụng lại nó trong nhiều activity .
Nói chung, fragment trong Android phải được đưa vào một activity do vòng đời của fragment đó sẽ luôn luôn bị tác động ảnh hưởng bởi vòng đời của activity. Trong trường hợp nếu tất cả chúng ta tạm dừng một activity thì toàn bộ những fragment tương quan đến activity đó cũng sẽ bị dừng lại .

Trong Android có thể chèn fragment vào bố cục activity bằng cách sử dụng phần tử và chia bố cục của activity thành các fragment. Ta có thể sửa đổi giao diện của thiết kế ứng dụng khi chạy, và cũng có thể thực hiện một fragment mà không có bất kỳ giao diện người dùng (UI) nào.

Có thể chọn sử dụng hoặc không sử dụng những fragment vào activity. Nhưng nếu sử dụng, nó sẽ cải tổ tính linh động của giao diện người dùng ứng dụng, và giúp kiểm soát và điều chỉnh phong cách thiết kế ứng dụng dựa trên kích cỡ thiết bị thuận tiện hơn .
Sau đây là ví dụ về sự khác nhau khi phong cách thiết kế nhiều fragment trong một activity để hiển thị cụ thể của một mục trên thiết bị máy tính bảng, và trên thiết bị di động .

1 png

Nếu bạn quan sát ví dụ trên cho Máy tính bảng, tất cả chúng ta đã xác lập activity A có hai fragment. Fragment tiên phong là hiển thị list những mục và fragment thứ hai là hiển thị chi tiết cụ thể về mục mà tất cả chúng ta đã chọn trong fragment tiên phong .
Đối với thiết bị cầm tay kích cỡ nhỏ sẽ không có đủ khoảng trống để hiển thị cả những fragment trong một activity, vì thế activity A gồm có fragment tiên phong để hiển thị list những mục, và activity B gồm có một fragment khác để hiển thị chi tiết cụ thể của một mục được chọn trong activity A .

Ví dụ: App GMAIL được thiết kế với nhiều fragment, do đó thiết kế của nó sẽ được thay đổi dựa trên kích thước của thiết bị như máy tính bảng hoặc thiết bị di động.

Table View

2 png

Mobile View

3 png

II. Vòng đời của Android Fragment

Sau đây là hình ảnh trình diễn vòng đời của Android fragment trong khi activity đang chạy .

4 png

Sau đây là danh sách các phương thức sẽ thực hiện trong vòng đời của fragment trong Android.

phương thức Mô tả
onAttach () Được gọi khi fragment đã được liên kết với một activity.
onCreate () Được sử dụng để khởi tạo fragment.
onCreteView() Được sử dụng để tạo fragment view
onActivityCreated () Được gọi khi fragment và view của fragment được khởi tạo, dùng để hoàn thành nốt công đoạn khởi tạo fragment và activity
onStart() Được gọi để hiển thị fragment.
onResume () Flagment hoạt động hoàn toàn trong activity.
onPause () Được gọi khi fragment không còn hiển thị và người dùng đang rời khỏi fragment.
onStop () Được gọi để dừng fragment.
onDestoryView () Giao diện view fragment bị xóa sau khi thực hiện.
onDestroy () Được gọi khi hủy fragment.
onDetach () Được gọi ngay sau khi fragment bị tách ra khỏi activity.

III. Ví dụ về Fragment trong Android

Sau đây là ví dụ về việc tạo hai fragment, hai button và hiển thị fragment tương ứng khi nhấp vào button trong ứng dụng Android .

Tạo một ứng dụng Android mới bằng cách sử dụng android studio và đặt tên là Fragment. Nếu bạn chưa biết cách tạo thì hãy xem bài Hello World Android.

Bây giờ ta cần tạo các file layout của fragment ( listitems_info.xml, detail_info.xml ) trong đường dẫn \ res \ layout để hiển thị các fragment đó trong layout chính. Hãy nhấp chuột phải vào folder Layout -> New -> chọn Layout resource file và đặt tên là listitems_info.xml .

Mở file listitems_info.xml và viết code như dưới đây:

Listitems_info.xml



    

Tạo một file khác tên details_info.xml, mở nó và viết code như dưới đây

details_info.xml



    
    

Bây giờ chúng ta cần phải tạo ra các file fragment class ( ListMenuFragment.java, DetailsFragment.java ) trong đường dẫn \ java \ com.tutlane.fragmentsexample, bằng cách kích chuột phải vào thư mục ứng dụng -> New -> Java class và đặt tên là DetailsFragment.java.

Tạo một file mới DetailsFragment.java và viết mã như dưới đây.

DetailsFragment.java

package com.tutlane.fragmentsexample;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Created by tutlane on 06-08-2017.
 */

public class DetailsFragment extends Fragment {
    TextView name,location;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.details_info, container, false);
        name = (TextView)view.findViewById(R.id.Name);
        location = (TextView)view.findViewById(R.id.Location);
        return view;
    }
    public void change(String uname, String ulocation){
        name.setText(uname);
        location.setText(ulocation);
    }
}

Nếu bạn quan sát code ở trên, chúng ta đã extends class Fragment và sử dụng LayoutInflater để hiển thị thông tin vào fragment. Chúng ta đã tạo một phương thức change() để thay đổi văn bản trong textview.

Tạo một file khác ListMothyFragment.java và viết code như dưới đây

ListMenuFragment.java

package com.tutlane.fragmentsexample;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

/**
 * Created by tutlane on 06-08-2017.
 */
public class ListMenuFragment extends ListFragment {
    String[] users = new String[] { "Suresh","Rohini","Trishika","Praveen","Sateesh","Madhav" };
    String[] location = new String[]{"Hyderabad","Guntur","Hyderabad","Bangalore","Vizag","Nagpur"};
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =inflater.inflate(R.layout.listitems_info, container, false);
        ArrayAdapter adapter = new ArrayAdapter(getActivity(),
                android.R.layout.simple_list_item_1, users);
        setListAdapter(adapter);
        return view;
    }
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        DetailsFragment txt = (DetailsFragment)getFragmentManager().findFragmentById(R.id.fragment2);
        txt.change("Name: "+ users[position],"Location : "+ location[position]);
        getListView().setSelector(android.R.color.holo_blue_dark);
    }
}

Trong đoạn code này ta đã extends class bằng ListFragment, và cũng tạo ra hai mảng string users, location dùng để chứa tên và vị trí. Ngoài ra cũng tạo sự kiện onListItemClick để cập nhật tên và vị trí trong DetailsFragment dựa trên mục danh sách đã chọn.

Bây giờ chúng ta cần hiển thị các fragment của mình theo chiều ngang trong layout chính.Mở file activity_main.xml lên và viết mã như sau:

activity_main.xml




    
    

Ta sẽ không cần sửa đổi nào cho file MainActivity.javaAndroidMainfest.xml.

IV. Kết quả của Ví dụ về fragment trong Android

Khi chạy ví dụ trên trong trình giả lập Android sẽ nhận được kết quả như hình bên dưới:

5 gif

Đây là cách sử dụng những fragment trong activity để thiết kế xây dựng multi-pane UI, nhằm mục đích kiểm soát và điều chỉnh bố cục tổng quan ứng dụng Android dựa trên size của thiết bị như : máy tính bảng hoặc điện thoại cảm ứng mưu trí, v.v.