📱 Android Studio Series - Fragment


ℹ️ Introduction


Android Studioに関するPostを初めて書きたいのですがC++To Java Post図結末を知らないまま、このような前後の矛盾した疑問は著者の頭の中でも離れられない.
申し訳ありません.私自身に.この文章とC++To Java Postの友達に
6専攻がこんなに人を傷つけるとは思わなかった.
Verlog起動時に作成したIntro台で、小さなプロジェクトで学んだ概念に基づいて、複数の参照とソースコードを再編成し、最も正確な情報に基づいて1つずつ作成します.他に説明がない限り、このシリーズのすべてのソースコード(Postを含む)はJavaで記述されていると考えられます.
今期のアナウンサーは分割を検討する.

🎛 Why We Use Fragments?


Fragmentは、FragmentActivityのいくつかのアクションまたはユーザーインタフェースを表します.
複数のタグを1つのアクティビティにマージして、複数のウィンドウを持つUIを構築し、複数のアクティビティで1つのタグを再利用できます.アクティブなモジュール化された部分と見なすことができます.独自のライフサイクル、独自の入力イベントの受信、およびアクティビティの実行時にイベントを追加および削除します.
(他のアクティビティで繰り返し使用できるサブアクティビティと見なすことができます.)
  • Android開発者-Pregmentドキュメントの最初の段落から抜粋

  • Androidのアクティビティは、アプリケーション画面を構成する基本単位です.Activityを設定すると、画面が複雑すぎるかコード量が大きいため、画面の各部分を個別に実行したい場合があります.また、1つのActivityをベースに複数の画面と機能を交互に表示したい場合があります.
    分割機能は、2つ以上の画面間をすばやく移動して、各画面を独立したコードに分割するのに役立ちます.

    Android導入分割はAndroid 3.0(APIレベル11)から始まった.基本的には、Tableのような大画面でよりダイナミックで柔軟なUIをサポートすることを目標としています.PhoneデバイスよりもTabletの画面が大きく、より多くのコンポーネントを収容できます.
    上の写真を見せてください.Tableでは、リスト分割とリスト分割の特定の操作により、内部要素が変化するDetail分割と2つの分割を1画面に配置できます.ただし、Phoneデバイスはリスト分割のみを表示し、ユーザはリスト分割内で特定の操作を実行しなければならず、TabletのUIと同じ形式でDetail分割を表示しなければ実現できない.△一般的なスマートフォンのKakaoTalk画面をタブレットやGalaxyFoldのKakaoTalk画面と比較すると、より速く理解できます.
    これにより、アクティブな条件(デバイスを実行するプロパティ)に基づいて異なる画面構成を作成できます.

    1朕上図の左側の形状は、予め複数の分割を作成し、一度に1つの分割が画面に表示され、オプションカードメニューまたはこの輪郭間を移動するために使用される.(BottomNavigationViewを使用して分割遷移を実現する方法については後述する.)
    2▼右側の形状は、大きな画面にメニューとビューを同時に表示したり、複数の部分をモジュール化して1つの画面に表示したりするために、デバイスに複数の区切り文字(例えばTable)を同時に表示するために使用されます.
    この記事では主に1▼を実施する方法を紹介する.

    🔨 Create a Fragment



    分割について議論する前に、本稿の例(単純なアプリケーション)を見てみましょう.
    MainActivity.Fragment SelectPlantとFragment Waringはjava上で交互に現れます.画面間の移動は、BottomNavigationViewによって行われ、データの移動は、分割選択平面のみによって分割トラッキングに一方向に伝送される.
    このシリーズでは、上記のプロジェクトのすべてのソースコードは提供されません.必要に応じて、関連概念を説明するために一部に抜粋します.(組み合わせが良ければ完全な絵が描けるかも…?)
    さらに、デフォルトでは、上述したプロセスを実施するために必要な技術のみが含まれるが、他の内容も含まれる場合がある.参考にしてください.

    Javaディレクトリの下にあるパッケージ名(ここではcom.example.watertheflowers)を選択し、右クリックして表示されるメニューに選択した「分割」(Blank)を作成します.そしてNew Android Componentウィンドウで分割名を指定して生成します.Javaファイルのpublic classを次のソースコードで変更します.
    📁 Fragment_SelectPlant.java
    public static class Fragment_SelectPlant extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment__select_plant, container, false);
            return rootView;
        }
    }
    📁 Fragment_Watering.java
    public static class Fragment_Watering extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment__watering, container, false);
            return rootView;
        }
    }
    MainActivityに分割を追加する方法は、BottomNavigationViewとともに「\分割取引」セクションで説明されています.その前に、FragmentManagerについて説明しましょう.

    ⚠▼注:OnCreateViewのパラメータ



    膨張器は、レイアウトファイルをロードするためのレイアウトグラフィックスを提供します.containerは、パーティションレイアウトを展開する親レイアウトで、「アクティブ」を表すレイアウトです.savedInstancesStateは、ステータス値を格納する Bundleの補助ツールです.
    この Bundleは、分割リカバリ(すなわち、リカバリ中の場合)に関するデータを提供する.

    👮 Fragment Manager



    📁 Fragment_SelectPlant.JAvaファイルの共通クラスの一部です.
    public static class Fragment_SelectPlant extends Fragment {}
    Fragmentクラス継承のFragment_SelectPlantクラスを作成しました.しかし,ユーザはまだ分割画面を見ることができない.あなたたちのMainActivityは何も体現していないからです.Fragmentを実際に利用するには、MainActivity内にFragmentManagerオブジェクトを作成する必要があります.オブジェクトの作成には、getSupportFragmentManager()と呼ばれる方法が必要です.
    Fragment fa = new Fragment_SelectPlant();
    A.同じパッケージのクラス自体をインポートすることでインスタンスを作成することもできます.
    (上記の方法は、Activityから分割中のメソッドを呼び出すために使用されます.)

    B.addToBackStack()メソッドでは、分割を挿入するためのTransactionを単一Activityのようにバックグラウンドスタックに配置できます.そのため、スマートフォンの後退ボタンで、アクティブなようにトランザクション全体を削除できます.
  • 高敦豪、『これがアンドロイドとコトリン』、韓光メディア(2020)、p 336.
  • C.次のセクションでご紹介します!

    ↔️ Fragment Transaction


    デジタル旅行とは

    FragmentTransactionオブジェクトの作成
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    以上のソースコードはAndroid Developerサイトから提供されています.ここでは、FragmentManagerクラスのbeginTransaction()メソッドを使用してFragmentTransactionオブジェクトを作成します.次の BottomNavigationViewおよびサンプルコードは、上述した方法を使用してオブジェクトを作成するのではなく、FragmentTransactionクラスの方法を使用して2つの分割領域間でスクリーン切り替えを行う.
    MainActivity.JAvaの一部
    πBoottomNavigationViewによる画面切り替え
  • 必要なインスタンスを作成する
  • BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavi); // bottomNavigationView 인스턴스 생성
    FragmentManager fragmentManager = getSupportFragmentManager(); // FragmentManager 인스턴스 생성
  • ウェルカムスクリーン
  • fa = new Fragment_SelectPlant(); // Fragment 객체 생성
    fragmentManager.beginTransaction().add(R.id.main_frame,fa).commit(); // 앱 초기 화면을 fragment__select_plant.xml로 설정.
  • BottomNavigationViewを用いて分割遷移
  • を実現する.
     bottomNavigationView.setOnItemSelectedListener((BottomNavigationView.OnItemSelectedListener) menuItem -> {
                if(menuItem.getItemId() == R.id.select_plants ) { //menuItem엔 각각의 Fragment를 지칭하는 Id를 가진 요소가 있음.
                    if (fa == null) {
                        fa = new Fragment_SelectPlant();
                        fragmentManager.beginTransaction().add(R.id.main_frame, fa).commit();
                    }
                    if (fa != null)
                        fragmentManager.beginTransaction().show(fa).commit();
                    if (fb != null)
                        fragmentManager.beginTransaction().hide(fb).commit();
                }
                else if(menuItem.getItemId() == R.id.watering){
                    if(fb == null) {
                        fb = new Fragment_Watering();
                        fragmentManager.beginTransaction().add(R.id.main_frame, fb).commit();
                    }
                    if(fb != null)
                        fragmentManager.beginTransaction().show(fb).commit();
                    if(fa != null)
                        fragmentManager.beginTransaction().hide(fa).commit();
                }
                return true;
            });
    上記のソースコードについては、まずアプリケーションの初期画面を表示するFragmentをFragment_SelectPlantに設定します.次に、bottomNavigationViewsetOnItemSelectedListenerでは、ユーザが選択したメニュー項目と、分割項目が作成されたか否かに応じて、ケースを別々に作成する.
    上記のソースコードをより明確に理解するために、FragmentTransactionクラスの主な方法およびそれらの役割を以下の表に示す.


    ⚌▼Fragment Transactionメソッド使用上の注意事項
    最後に1.commit()に電話する必要があります.
    2.複数の分割を同じコンテンツに追加すると、追加の順序によってビューでの表示順序が決まります.
    ここでは、MainActivityの上にある分割間を切り替える方法について説明します.次に、分割間でデータを転送する方法を見てみましょう.

    🔜💬 Communicating Between Fragments


    🔜🔁 Fragment Lifecycle


    📄 References


    🧭 Android開発者-developer.android.com
    📖 高敦豪、『これがアンドロイドとコトリン』、韓光メディア(2020)、p 321-347.