본문 바로가기

카테고리 없음

<Android> - 안드로이드 Fragment(2)

새로운 메뉴 프래그먼트를 만들어서 코드를 직접 추가해서 두개의 화면을 전환해 보겠습니다!

 

fragment_main.xml 을 복사해서 똑같은 xml파일을 만든후

fragment_menu.xml로 이름을 바꾸어 줍니다!!

 

디자인은 환면전환을 쉽게 알아 볼 수 있게 배경색을 주황색으로 설정하고

Text는 메뉴 프래그먼트 버튼은 메인 화면으로 바꾸어 줍니다.

 

다음 똑같이 MainFragment.java파일도 복사해서 똑같이 만든후 MenuFragment로 이름을 변경해주고

코드를 수정합니다.

 

public class MenuFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_menu, container, false);
    }
}

inflate메서드로 전달되는 첫번째 파라미터 값이 R.layout.fragment_menu로 바뀌어서

이 MenuFragment 클래스에는 fragment_menu.xml 파일의 내용이 인플레이션되어 설정 됩니다.

 

이제 메인 프래그먼트안의 버튼을 누르면 메뉴 프래그먼트로 화면전환 되도록 코드를 수정합니다.

 

package com.example.samplefragment;

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;


public class MainFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_main, container, false);

        Button button = rootView.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity activity = (MainActivity) getActivity();
                activity.onFragmentChanged(0);
            }
        });
        return rootView;
    }



}

최상위 레이아웃은 rootView는 메인 프래그먼트 안에 들어 있는 것이고

메인 프래그먼트는 이 레이아웃을 보여주기 위한 틀이라고 생각할 수 있습니다.

 

onFragmentChanged 메서드는 메인 액티비티에 새로 추가할 메서드로 프래그먼트 매니저를 이용해

프래그먼트를 전환하는 메서드입니다.

 

getActivity 메서드를 호출하면 프래그먼트가 올라가 있는 액티비티가 어떤 것인지 확인할 수 있습니다.

 

이제 메인 액티비티에서 나머지 필요한 코드를 입력합니다.

 

package com.example.samplefragment;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    MainFragment mainFragment;
    MenuFragment menuFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainFragment = (MainFragment) getSupportFragmentManager().findFragmentById(R.id.mainFragment);
        menuFragment = new MenuFragment();
    }

    public void onFragmentChanged(int index){
        if (index == 0) {
            getSupportFragmentManager().beginTransaction().replace(R.id.container, menuFragment).commit();
        } else if (index == 1) {
            getSupportFragmentManager().beginTransaction().replace(R.id.container, mainFragment).commit();
        }
    }
}

onFragmentChanged 메서드는 파라미터로 전달된 정수의 값이 0이면 메인 프래그먼트, 1이면 메뉴 프래그먼트가

보이게 하였습니다.

 

replace 메서드로 전달되는 첫 번째 파라미터는 프래그먼트를 담고있는 레이아웃의 id가 되어야 하므로

R.id.container를 전달합니다.

 

액티비티와 프래그먼트가 의사소통하는 방식

 

 

 

초기 실행화면에서 버튼을 눌러보면!!

 

잘 전환되는것을 확인할 수 있습니다!!