안드로이드 이론 빡공 10
본문 바로가기
안드로이드(Android)

안드로이드 이론 빡공 10

by KyeongMin 2020. 6. 16.
728x90
반응형

 

 

 

package com.threedpit.myfragment;

import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * fragment_main.xml에 있는 것을
 * 인플레이션 한다. 즉, 메모리에 올리면서
 * 이 프래그먼트에 연결해준다 생각하면된다.
 * */
public class MainFragment extends Fragment {
    @Override
    /**
     *     현재 자바 파일과 xml 파일 이연결되는 메소드가
     *     onCreateView 이다.
     */
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        /**res폴더에 layout폴더안에 있는 fragment_main.xml을
         * container라는 뷰 그룹에 넣어라이고
         * 이게 연결되고 액티비티 화면에 올라가는 시간이 달라
         * false로 해준다고 일단은 생각하자 )*/
        return inflater.inflate(R.layout.fragment_main, container, false);

    }
}

**fragment_main.xml**

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainFragment"
    android:orientation="vertical"
    android:background="#CCF6FC"
    >

    <!-- TODO: Update blank fragment layout -->

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="메인 프래그먼트"
        android:textSize="50sp"
        />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="화면전환" />

</LinearLayout>

**activity_main.xml**

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/mainFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.threedpit.myfragment.MainFragment"/>        <!--안드로이드 네임이라는 클래스라는 속성을 추가 -->


</FrameLayout>

 

 

package com.threedpit.myfragment;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    MainFragment mainFragment; //메인프래그먼트 참조하기위한 변수
    Main2Fragment main2Fragment;//메인2프래그먼트 참조하기위한 변수
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //아래처럼하면 매니저를 참조할수 있음
        //현재 mainFragment는 메인xml레이아웃에 추가되어있어서 아래와 같이 해야하고
        mainFragment = (MainFragment) getSupportFragmentManager().findFragmentById(R.id.mainFragment);
        //main2프래그먼트의 경우는 메인xml레이아웃에 추가되어 있지 않기 때문에
        main2Fragment = new Main2Fragment();// new로 인스턴스 생성 했다고 동작하는게 아님 이게 액티비티로
        //올라가야 되는것임
    }
        public void onFragmentChanged(int index){
        if(index==0) {
            //여기서 트랜잭션 여러개 명령어를 한번에 사용할때 사용한다.
            // 느낌이 현재 장소에 mainFragment를 보여주라 라는 것
            getSupportFragmentManager().beginTransaction().replace(R.id.container, mainFragment).commit();
        }else if(index==1){
            // 느낌이 현재 장소에 mainFragment를 보여주라 라는 것
            getSupportFragmentManager().beginTransaction().replace(R.id.container, main2Fragment).commit();
        }
    }
}

**activity_main.xml**

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/mainFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.threedpit.myfragment.MainFragment"/>        <!--안드로이드 네임이라는 클래스라는 속성을 추가 -->


</FrameLayout>

**MainFragment.java**

package com.threedpit.myfragment;

import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

/**
 * fragment_main.xml에 있는 것을
 * 인플레이션 한다. 즉, 메모리에 올리면서
 * 이 프래그먼트에 연결해준다 생각하면된다.
 * */
public class MainFragment extends Fragment {
    @Override
    /**
     *     현재 자바 파일과 xml 파일 이연결되는 메소드가
     *     onCreateView 이다.
     */
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        /**res폴더에 layout폴더안에 있는 fragment_main.xml을
         * container라는 뷰 그룹에 넣어라이고
         * 이게 연결되고 액티비티 화면에 올라가는 시간이 달라
         * false로 해준다고 일단은 생각하자 )*/

        // 현재 레이아웃을 인플레이터를 통해 메모리에 올려주는 과정
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_main, container, false);
        Button button = rootView.findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /**
                 * 우리가 직접 화면을 띄우는것이 아니니
                 *액티비티에 권한을 위임해야한다.
                 *항상 프래그먼트는 액티비티 위에 올라가 있는다.
                 *그래서 올라가 있는 액티비티를 참조하기 위해서는  getActivity()라는 매소드를 쓴다.
                 * */
              MainActivity activity = (MainActivity)getActivity();
              activity.onFragmentChanged(1); /**1이면 Main2 프래그먼트를 띄우고
                                                0이면 Main 프래그먼트를 띄움 */
            }
        });
        return rootView;
    }
}

**fragment_main.xml**

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainFragment"
    android:orientation="vertical"
    android:background="#CCF6FC"
    >

    <!-- TODO: Update blank fragment layout -->

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="메인 프래그먼트"
        android:textSize="50sp"
        />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="화면전환" />

</LinearLayout>

**Main2Fragment.java**

package com.threedpit.myfragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import androidx.fragment.app.Fragment;

/**
 * fragment_main.xml에 있는 것을
 * 인플레이션 한다. 즉, 메모리에 올리면서
 * 이 프래그먼트에 연결해준다 생각하면된다.
 * */
public class Main2Fragment extends Fragment {
    @Override
    /**
     *     현재 자바 파일과 xml 파일 이연결되는 메소드가
     *     onCreateView 이다.
     */
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        /**res폴더에 layout폴더안에 있는 fragment_main.xml을
         * container라는 뷰 그룹에 넣어라이고
         * 이게 연결되고 액티비티 화면에 올라가는 시간이 달라
         * false로 해준다고 일단은 생각하자 )*/
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_main2, container, false);
        Button button = rootView.findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /**
                 * 우리가 직접 화면을 띄우는것이 아니니
                 *액티비티에 권한을 위임해야한다.
                 *항상 프래그먼트는 액티비티 위에 올라가 있는다.
                 *그래서 올라가 있는 액티비티를 참조하기 위해서는  getActivity()라는 매소드를 쓴다.
                 * */
                MainActivity activity = (MainActivity)getActivity();
                activity.onFragmentChanged(0); /**1이면 Main2 프래그먼트를 띄우고
                 0이면 Main 프래그먼트를 띄움 */
            }
        });
        return rootView;
    }
}

**fragment_main2.xml**

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainFragment"
    android:orientation="vertical"
    android:background="#F3F8C2"
    >

    <!-- TODO: Update blank fragment layout -->

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="메인2 프래그먼트"
        android:textSize="50sp"
        />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="돌아가기" />

</LinearLayout>

부분 이미지 출처 : [2020 Do it! 안드로이드 앱 프로그래밍(개정7판)]

728x90
반응형

'안드로이드(Android)' 카테고리의 다른 글

안드로이드 이론 빡공 12  (0) 2020.06.19
안드로이드 이론 빡공 11  (0) 2020.06.17
안드로이드 이론 빡공 9  (0) 2020.06.15
안드로이드 이론 빡공 8  (0) 2020.06.14
안드로이드 이론 빡공 7  (0) 2020.06.12

댓글