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

프래그먼트에 대해서 궁금한게 있습니다.

0 추천

안녕하세요.

궁금한게 생겨서 이렇게 선배님들을 찾아뵙니다.

다름이 아니라 프래그먼트에 대해서 궁금한점이 생겼습니다.

처음 프래그먼트를 다뤄보는데요.

매우 신기하고 유용하긴 합니다..

그런데 프래그먼트 전환에서 좀 이상한게 있어서요.

일단 XMl 코드 먼저 보여드립니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
 
        <fragment
            android:id="@+id/fragment1"
            android:name="com.example.fragmentchange.FragmentOne"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
 
    </FrameLayout>
 
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
 
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
 
</LinearLayout>
 
위와같이 xml에서 fragment를 하나 두었는데요.
저 프래그먼트를 전환하고자 메인엑티비티에서 아래와 같이 처리하였습니다.
전환할 프래그먼트원 엑티비티, 프래그먼트투 엑티비티는 준비 되어 있는 상황입니다.
 
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = (Button)findViewById(R.id.button1);
btn2 = (Button)findViewById(R.id.button2);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
FragmentOne f1 = new FragmentOne();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment1, f1);
ft.commit();
 
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
FragmentTwo f2 = new FragmentTwo();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment1, f2);
ft.commit();
}
});
}
 
위와 같이 전환을 시도하였는데,
기존에 있는 XML상에서 추가했던 프래그먼트는 그대로 존재하면서
한개가 더 생기는 식으로 중복생성이 되는데요.
제가 하고싶은것은 XML상에서 선언한 Fragment의 대상 name을 변경하고 싶은데요.
 android:name="com.example.fragmentchange.FragmentOne" 이부분이요.
이부분이 대상이 되는 프래그먼트의 네임을 설정한 부분인거 같은데
저는 이부분을 바꿔보고 싶습니다.
어떻게 해야될까요?

 

//생각해보니 XML에서 Fragment를 추가하나 코드상에서 Fragment를 추가하나 똑같은거 같네요;;

동적으로 프래그먼트가 전환되게 처리하려면 코드상에서 프래그먼트 트랜섹션을 이용해야하는거 같은데

제가 이해한게 맞는지 모르겠네요;;

저는 XML에서 만든 프래그먼트의 name속성을 자꾸 바꿔볼려고 햇엇는데 이런 개념으로 접근하면 안되는거엿나;; 

갸아악 (21,260 포인트) 님이 2014년 7월 2일 질문
갸아악님이 2014년 7월 2일 수정

1개의 답변

0 추천
 
채택된 답변

XML이 아니라 소스에서 하면 안되는 이유라도 있나요..?

<FrameLayout

        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
</FrameLayout>
 
위와 같이 해놓으신 다음 Activity소스에서..
onCreate(Bundle data){
   Fragment f = new com.example.fragmentchange.FragmentOne();
   FragmentTransaction ft = getFragmentManager().beginTransaction();
   ft.replace(R.id.container, f);
   ft.commit();
}
이렇게 하시면 xml과 동일하게 첫화면을 구성할 수 있습니다.
 
replace 할때 id부분에 Fragment Id가 아니라 Fragment를 담는 그릇(FrameLayout) 아이디가 되어야 합니다.
dev_아마 (9,750 포인트) 님이 2014년 7월 3일 답변
갸아악님이 2014년 7월 25일 채택됨
...