새로운 메뉴 프래그먼트를 만들어서 코드를 직접 추가해서 두개의 화면을 전환해 보겠습니다!
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를 전달합니다.
초기 실행화면에서 버튼을 눌러보면!!
잘 전환되는것을 확인할 수 있습니다!!