안드로이드 프래그먼트 - 2

2020. 7. 12. 16:07공부 정리/안드로이드

프래그먼트를 만들어 액티비티의 xml 레이아웃에 추가하는 과정

<activity_main.xml>

<fragment
        android:id="@+id/mainFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="org.techtown.fragment.MainFragment" />

메인 액티비티에서 fragment 클래스를 추가합니다.

 

<fragment_main.xml>

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="메뉴 화면으로"
        android:id="@+id/button1" />

fragment.xml에서 버튼을 추가합니다.

 

<MainFragment.java>

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

fragment에서 추가한 버튼에 클릭 리스너로 연결합니다. 

버튼이 눌렸을 때 메인 액티비티 객체를 참조한 후 메인 액티비티에서 정의한 onFragmentChanged() 메소드를 실행합니다.

 

<MainActivity.java>

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();
        }
    }

메인 프래그먼트를 id를 통해서 찾아야 하는데 프래그먼트가 view가 아니라서 프래그먼트를 관리하는 fragmentmanager() 객체의 findFragmentById를 통해 찾아야 합니다.

 

메인 액티비티에서 FragmentManager 객체의 replace() 메서드를 통해 두 프래그먼트를 바꾸는 코드입니다.

 

 

출처

Do it! 안드로이드 앱 프로그래밍
국내도서
저자 : 정재곤
출판 : 이지스퍼블리싱 2017.02.21
상세보기

https://github.com/mike-jung/DoItAndroid

 

mike-jung/DoItAndroid

Do it! 안드로이드 앱 프로그래밍(개정7판)의 소스 코드. Contribute to mike-jung/DoItAndroid development by creating an account on GitHub.

github.com