본문 바로가기
Study/Android

android fragment (fragment transaction)

by Answer Choi 2015. 2. 11.
반응형




 



fragment.zip

 

이번에 알아볼 껀 fragment 입니다.

 

예전에도 fragment에 대해서 포스팅을 햇었는데요.

 

이번엔 fragment transaction을 통한 서로 다른 fragment를 나타내는 방법입니다.

 

저는 하나의 activity와 3개의 fragment를 사용하였습니다.

 

일단 첫번째 fragment는 image이구요.

 

두번째 fragment는 버튼.

 

세번째는 웹페이지입니다.

 

그리고 activity에는 버튼 2개가 있어 fragment 를 이동할 수 있습니다.

 

먼저 activity를 보시면 아래와 같이 비어있는 공간과 밑에 버튼 2개가 자리잡고 있습니다.

 

이 비어있는 공간에 fragment가 들어가게 됩니다.

 

 

 

이미지 fragment가 들어간 모습입니다.

 

 

이건 버튼 fragment가 들어간 모습이구요.

 

 

마지막으로 웹페이지가 들어간 fragment입니다.

 



 

 

간단하게 소스르 보시면 ..

 

mainActivity.java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void switch_fragment(int state){

    switch (state){
    case image_state:
        ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fraglayout, image, imageFrag);
        //ft.addToBackStack(null);            
        ft.commit();
        btnLeft.setText("button");
        btnRight.setText("web");
        frag_state = 1;
        break;
    case button_state:
        ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fraglayout, button, buttonFrag);
        //ft.addToBackStack(null);            
        ft.commit();
        btnLeft.setText("image");
        btnRight.setText("web");
        frag_state = 2;
        break;
    case web_state:
        ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fraglayout, web, webFrag);
        //ft.addToBackStack(null);            
        ft.commit();
        btnLeft.setText("image");
        btnRight.setText("button");
        frag_state = 3;
        break;
    default:
        break;
    }
}
 
cs


이부분이 메인액티비티에서 fragment를 이동하는 소스입니다.


Line 5~8 : 이부분이 핵심이죠~

 

그리고 line 7은 활성화 했을때 back키를 사용하여 이전 fragment로 이동할 수 있습니다.

 

fragment소스 하나만 보시면..

 

buttonFragment.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class buttonFragment extends Fragment implements OnClickListener{
 
    Button btn;
    View view;
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
            view = inflater.inflate(R.layout.button_frag, container, false);
            init();
 
            return view;
        }
    private void init(){
        btn = (Button)view.findViewById(R.id.btn);
        btn.setOnClickListener(this);
 
    }
    @Override
        public void onClick(View v) {
            switch (v.getId()){
            case R.id.btn:
                Toast.makeText(getActivity(), "hi welcome to button fragment", Toast.LENGTH_SHORT).show();
                break;
            }
 
        }
}
 
cs


요런식으로 구성이 되어있는데..

 

Line 14: 저는 fragment 마다 별도의 레이아웃을 만들었는데 findViewById를 쓰실려면 저렇게 view를 해주셔야 합니다. line8에 보시면 xml파일을 인플레이트 했습니다.

 

Line 22: 여기서도 보시면 getActivity()를 썼는데 getapplicationcontext()를 쓸 수 없고, (이건 액티비티가 아니라서) 이 플래그먼트의 액티비티에서 컨텍스트를 가져오기 위해 저렇게 해줍니다.

 

마찬가지로 activity의 메소드를 쓰실려면 getActivity()를 써주시면 쓸 수 있습니다.^^

 

 

 

반응형

인기글