Android Fragmentについて
Fragmentのデザイン哲学
Androidが最初にタグを導入したのはAndroid 3.0(APIレベル11)から.デフォルトでは、タブレットなど、よりダイナミックで柔軟なUI設計をサポートすることを目標としています.
例えば、ニュースアプリケーションの場合、A原稿は左側に文章リストを表示し、B原稿は右側に文章内容を表示することができる.画面の大きいタブレットでは、リストとコンテンツを1つのアクティビティで同時に表示できますが、モバイルデバイスでは、各アクティビティにAとBタグを表示できます.
分割とは?
アプリケーションUIの再利用可能な部分を分割します.分割は、独自のレイアウトを定義し、管理し、独自のライフサイクルを持ち、独自の入力イベントを処理します.分割は単独では存在せず、アクティブまたは他の分割によって管理される必要があります.分割されたビュー階層は、ホストビュー階層の一部であってもよいし、ホストに接続してもよい.
ここで重要なキーワードは
分割の作成勾配設定 分割クラス を作成する
アクティビティに追加
前述したようにFragmnetは単独では存在しない.したがって、FragmentはFragmentActivityに含める必要があります.デフォルトでは、プロジェクトの作成時にAppCompatActivityとして作成され、AppCompatActivityはFragmentActivityを継承しているため、すぐに使用できます.
AppCompatActivityは、Activityを最終的に継承し、サブバージョンと互換性のあるクラスです.
AppCompatActivityについては、ここです。を参照してください.
FragmentContainerView
FragmentContainerViewは、FrameLayoutで動的計画を作成する新しい方法です.
たとえば、2つのエンティティ間の[終了](Exit)遷移と[イン](In)遷移は重複しません.逆に、このFragmentContainerViewは、まず終了アニメーションを開始し、次に起動アニメーションを開始します.
https://youtu.be/RS1IACnZLy4?t=548
🔴
name使用時は 構文で追加
FragmentContainerViewのnameにで説明したようにタグを明示的に追加できますが、プログラミングによってタグを動的に追加することもできます. FragmentContainerViewはname属性を保持して削除します.
ActivityのonCreateから
savedInstancesStateがnullの条件文に接頭辞を追加する理由
アクティビティがシステムまたはスクリーンで回転して再生されると、savedInstance Stateはnullではないため、少し不注意で
アクティビティのライフサイクルでは、onPause()->onStop()->onSavedInstancesState()の順に呼び出し、別のアクティビティに移動し、バックグラウンドで画面を移動したり、画面を回転したりすると、onSavedInstancesState()が呼び出されますが、ユーザが明示的に後で後退または完了()関数を終了してアクティビティが終了した場合は呼び出されません.Activity Lifecycle
onSavedInstanceState()の使用時期
画面再生時に表示されるデータを保持するために、簡単で簡単なUIステータスを保存します.
onSavedInstanceState()はデータをディスクにシリアル化するため、
Save UI states
コメントサイト https://developer.android.com/guide/fragments https://developer.android.com/guide/components/fragments?hl=ko
Androidが最初にタグを導入したのはAndroid 3.0(APIレベル11)から.デフォルトでは、タブレットなど、よりダイナミックで柔軟なUI設計をサポートすることを目標としています.
例えば、ニュースアプリケーションの場合、A原稿は左側に文章リストを表示し、B原稿は右側に文章内容を表示することができる.画面の大きいタブレットでは、リストとコンテンツを1つのアクティビティで同時に表示できますが、モバイルデバイスでは、各アクティビティにAとBタグを表示できます.
分割とは?
アプリケーションUIの再利用可能な部分を分割します.分割は、独自のレイアウトを定義し、管理し、独自のライフサイクルを持ち、独自の入力イベントを処理します.分割は単独では存在せず、アクティブまたは他の分割によって管理される必要があります.分割されたビュー階層は、ホストビュー階層の一部であってもよいし、ホストに接続してもよい.
ここで重要なキーワードは
재사용
、자체 수명 주기
、단독으로 존재 불가
FragmentはAndroid Jetpackライブラリのナビゲーション、BottomNavigationView、View Pager 2と組み合わせて使用されます.分割の作成
dependencies {
def fragment_version = "1.4.1"
// Java language implementation
implementation "androidx.fragment:fragment:$fragment_version"
// Kotlin
implementation "androidx.fragment:fragment-ktx:$fragment_version"
}
public Fragment() {
initLifecycle();
}
@ContentView
public Fragment(@LayoutRes int contentLayoutId) {
this();
mContentLayoutId = contentLayoutId;
}
Fragment 생성자는 위처럼 2가지가 있습니다.
class AFragment: Fragment() { }
class AFragment: Fragment(R.layout.fr_a) { }
継承を使用して簡単な原稿を作成し、2番目のジェネレータレイアウトidを使用して原稿を作成できます.onCreateView
を上書きすることなくUIを構成できます.アクティビティに追加
前述したようにFragmnetは単独では存在しない.したがって、FragmentはFragmentActivityに含める必要があります.デフォルトでは、プロジェクトの作成時にAppCompatActivityとして作成され、AppCompatActivityはFragmentActivityを継承しているため、すぐに使用できます.
AppCompatActivityは、Activityを最終的に継承し、サブバージョンと互換性のあるクラスです.
AppCompatActivityについては、ここです。を参照してください.
Activity xml에 FragmentContainerView를 추가해 줍니다.
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container_view"
android:name="com.example.test.AFragment"
android:tag="AFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
FragmentContainerView
FragmentContainerViewは、FrameLayoutで動的計画を作成する新しい方法です.
FragmentContainerView
はFrameLayoutを継承し、計画のz順序処理を改善した.たとえば、2つのエンティティ間の[終了](Exit)遷移と[イン](In)遷移は重複しません.逆に、このFragmentContainerViewは、まず終了アニメーションを開始し、次に起動アニメーションを開始します.
https://youtu.be/RS1IACnZLy4?t=548
주의점
ID属性を追加せずにname属性にFragmentを追加すると、🔴
FragmentContainerView must have an android:id to add Fragment...
タグを追加するにはid属性が必要であることを誤って示します.name使用時は
android:id 속성 필수
!FragmentContainerViewのnameに
class ExampleActivity : AppCompatActivity(R.layout.example_activity) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
supportFragmentManager.commit {
setReorderingAllowed(true)
add<AFragment>(R.id.fragment_container_view)
}
}
}
}
ActivityのonCreateから
중요! savedInstanceState가 null일때
FragmentManagerをインポートし、FragmentTransactionのAddを使用してコンテナIDにタグを追加できます.savedInstancesStateがnullの条件文に接頭辞を追加する理由
アクティビティがシステムまたはスクリーンで回転して再生されると、savedInstance Stateはnullではないため、少し不注意で
중복 생성
になります.アクティビティのライフサイクルでは、onPause()->onStop()->onSavedInstancesState()の順に呼び出し、別のアクティビティに移動し、バックグラウンドで画面を移動したり、画面を回転したりすると、onSavedInstancesState()が呼び出されますが、ユーザが明示的に後で後退または完了()関数を終了してアクティビティが終了した場合は呼び出されません.Activity Lifecycle
画面再生時に表示されるデータを保持するために、簡単で簡単なUIステータスを保存します.
onSavedInstanceState()はデータをディスクにシリアル化するため、
저장용량 및 속도에 의해 제한됩니다.
のオブジェクトをシリアル化する場合は、シリアル化に多くのメモリが消費される可能性があります.シリアル化プロセスは、構成の変更時にプライマリ・スレッドで発生するため、シリアル化が長期にわたって実行されると、フレームダウンとビジュアルブレークが発生する可能性があります.비트맵과 같은 대량의 데이터, 또는 길이가 긴 직렬화나 역직렬화가 필요한 복잡한 데이터 구조를 저장하는 데 onSavedInstanceState()를 사용해서는 안 됩니다. 대신 기본 유형 및 String 같은 단순하고 작은 객체만 저장해야 합니다.
たとえば、テキストフィールドの値、チェックボックスの状態、リストのスクロール位置などです.Save UI states
コメントサイト
Reference
この問題について(Android Fragmentについて), 我々は、より多くの情報をここで見つけました https://velog.io/@bang/Android-Fragment-알아보기-eh1q8nmwテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol