마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

fragment 간에 버튼으로 화면 띄우기

0 추천

메인 액티비티 안에 fragment 1,2가 있습니다.

버튼도 버튼1, 버튼2가 있는데,

버튼1을 누를 때는 fragment1이, 버튼2를 누르면 fragment2가 뜨도록 만들고 싶습니다.

버튼1을 누르고 다음 버튼2를 눌러서 교체되는 것을 확인했는데, 거기서 버튼1을 또 누르면

화면 전환이 안되고 그냥 앱이 꺼집니다. 어떻게 해결해야 하나요?ㅜㅜ

 

<코드>

  switch (v.getId()) {
      

        case R.id.button2:
            ft.addToBackStack(null);
            ft.replace(R.id.fragment,fragment).commit();
            break;

        case R.id.button4:
            ft2.addToBackStack(null);
            ft2.replace(R.id.fragment2, fragment2).commit();
            break;
    }
}

 

오이에요 (230 포인트) 님이 2016년 5월 12일 질문

2개의 답변

+1 추천
 
채택된 답변
MainActivity.java
..생략
onClick(View v) {
      FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
      switch (v.getId()) {
           case Button1:
                ft.replace(R.id.container, Fragment1.newInstance());
                break;
           case Button2:
                ft.replace(R.id.container, Fragment2.newInstance());
                break;
      }
      ft.commit();
}

activity_main.xml
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button1 ..생략/>
    <Button2 ..생략/>

     <FrameLayout
         android:id="@+id/container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>

</LinearLayout>


class Fragment1 extends Fragment {
     public static Fragment newInstance() {
         return new Fragment1();
     }
}

class Fragment2 extends Fragment {
     public static Fragment newInstance() {
         return new Fragment2();
     }
}

이런식으로 하면 됩니다~!

Spacebar (1,300 포인트) 님이 2016년 5월 12일 답변
오이에요님이 2016년 5월 12일 채택됨
감사합니다~ 정말 도움이 됬어요
소중한 지식 정말 감사합니다^^///
0 추천

replace 에서 첫번째 파라메터는 fragment 가 들어갈 컨테이너 아이디 입니다.

같은 레이아웃에 Fragment 만 교체되는걸 원하시는거면 컨테이너(ex : FrameLayout)를 하나만 사용하세요.

 

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.addToBackStack(null);

switch (v.getId()) {
        case R.id.button2:
            ft.replace(R.id.fragment, fragment).commit();
            break;

        case R.id.button4:
            ft.replace(R.id.fragment, fragment2).commit();
            break;
}

 

s

Spacebar (1,300 포인트) 님이 2016년 5월 12일 답변
fragment 각각 레이아웃이 있는데,
메인 레이아웃에 창을 띄우는 식으로 넣고 싶어요~
그렇게 할려면 어떻게 해야 하나요?
한 레이아웃에다가 적용했을 때,
두 번 이상 부터는 스위치가 안되네요 ㅜ
fragment가 덮혀져서 전환이 안되요 ㅜㅜ
...