android-fragments учебник
Начало работы с андроидными фрагментами
Поиск…
замечания
Фрагменты - очень важные компоненты пользовательского интерфейса в приложениях для Android. Они были впервые представлены в Android 3.0 (Honeycomb) API.
Понимание парадигмы дизайна фрагментов
Фрагменты были введены, прежде всего, для поддержки модульного и гибкого интерфейса на устройствах с большим экраном, таких как планшеты.
Фрагменты управляются действием. Обычно каждый фрагмент представляет часть экрана. В деятельности может быть более одного фрагмента. Фрагменты также можно назвать вспомогательными . Когда вы добавляете фрагмент как часть вашего макета активности, он живет в ViewGroup внутри иерархии представлений активности, а фрагмент определяет свой собственный макет представления.
ЖИЗНЕННЫЙ ЦИКЛ
Подобно действиям, фрагменты также имеют жизненный цикл. Фрагмент получает уведомление о следующих событиях.
- Присоединяйтесь к деятельности - onAttach (Activity)
- Создать фрагмент - onCreate (Bundle)
- Создать представление - onCreateView (LayoutInflater, ViewGroup, Bundle)
- Создание активности - onActivityCreated (Bundle)
- Просмотреть состояние восстановлено - onViewStateRestored (Bundle)
- Сделано видимым для пользователя - onStart ()
- начало взаимодействия с пользователем - onResume ()
- пауза взаимодействия с пользователем - onPause ()
- Сделано невидимым для пользователя - onStop ()
- При уничтожении зрения - onDestroyView ()
- Уничтожить фрагмент - onDestroy ()
- Отделитесь от действия - onDetach ()
Как программист, вы должны переопределить различные методы обратного вызова жизненного цикла, как правило, мы реализуем методы onCreate (), onCreateView () и onPause ().
Подклассы фрагмента
- DialogFragment - для отображения плавающего диалога
- ListFragment - для отображения списка элементов
- PreferenceFragment - полезный для создания настроек активности
Рекомендации
Добавление фрагментов
Добавление фрагмента статически
Файл: activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<fragment
android:id="@+id/fragment2"
android:name="com.example.fragmentexample.Fragment2"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
<fragment
android:id="@+id/fragment1"
android:name="com.example.fragmentexample.Fragment1"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
</LinearLayout>
Файл: fragment1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#00ff00"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="fragment frist"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
Файл: fragment2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#0000ff"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Second Fragment"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
Файл: MainActivity.java
package com.example.fragmentexample;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Файл: Fragment1.java
package com.example.fragmentexample;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment1,container, false);
}
}
Файл: Fragment2.java
package com.example.fragmentexample;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment2 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment2,container, false);
}
}
Динамическое добавление фрагмента
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:id="@+id/container1"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
<FrameLayout
android:id="@+id/container2"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
</LinearLayout>
FrameLayout действует как контейнер фрагментов.
Класс MainActivity
Файл: MainActivity.java
package com.example.fragmentexample;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadFragment(this, R.id.container1,new Fragment1(),"fragment1");
loadFragment(this, R.id.container2,new Fragment2(),"fragment2");
}
public static void loadFragment(Activity activity, int containerId, Fragment fragment, String tag)
{
activity.getSupportFragmentManager().beginTransaction().
replace(containerId, fragment,tag).commitAllowingStateLoss();
}
}