본문 바로가기
안드로이드 웹앱 콘테츠 개발자 양성(국비지원)/Fragment

Android Studio Fragment 2(View+Activity)

by 차누감 2019. 9. 26.

이번 예제는 Fragment를 활용하여 버튼을 눌렀을 때, 창을 띄우는 효과이다.

Android Studio Fragment 1과 다른 점은activity_main.xml 코드에 <fragment/>태그문을 이용하지않은것이다.

그리고 프레그먼트를 만들때 전달된 Argument(어떠한 값) 가 있다면 같이 전달해 줄 수 있는 방법이 있다.

Android에서는 이 예제처럼(태그문을 이용하지 않는) 하는 방법을 더 선호한다.

물론 사이즈를 시계만큼만 했기 때문에 저렇게 보이지만 만약 화면 전체 사이즈를 했다면 얘기는 다를 것이다.

<실행 화면>

 

 

코드 순서는 

1) activity_main.xml 코드 작성 (화면 구성)

2) fragment_my.xml 코드 작성 (화면 구성)

3) MyFragment.java 코드 작성

4) MainActivity.java 코드 작성

 

1) activity_main.xml 코드 작성 (화면 구성) 

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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">
 
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Fragment 추가"
        android:textAllCaps="false"
        android:onClick="clickBtn"/>
 
<!--    Fragment가 추가될 ViewGroup-->
 
    <LinearLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
 
    </LinearLayout>
 
 
 
</LinearLayout>
 
 

 

화면 구성

2) fragment_my.xml 코드 작성 (화면 구성)

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
 
    <AnalogClock
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
 
</RelativeLayout>
 
 

analogClock이 시계 모양이다. 미리 보기에서는 안보인다.

3) MyFragment.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
 
 
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
 
public class MyFragment extends Fragment {
 
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
 
        View view=inflater.inflate(R.layout.fragment_my,container,false); //container <-부모 사이즈를 주고 , false=아직 붙이지 않는다.
 
        //혹시 프레그먼트를 만들때 전달된 Argument 가 있다면
        Bundle bundle= getArguments();
 
        String name=bundle.getString("Name","익명"); // "Name" 키 값이 없으면 "익명"으로
       int age= bundle.getInt("Age",0);
 
        Toast.makeText(getActivity(),  name+" , "+age,Toast.LENGTH_SHORT).show();
 
        return view;
    }
}
 
 
 

4) 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
 
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void clickBtn(View view) {
        //id가 container인 녀석에게 MyFragment를 추가
 
        //Fragment 관리자를 소환
        FragmentManager fragmentManager= getSupportFragmentManager();
 
        //프레그먼트의 동적추가, 삭제, 재배치 작업을 시작한다!!
        FragmentTransaction ft =fragmentManager.beginTransaction(); //작업자 리턴
 
        MyFragment fragment= new MyFragment();
 
        //프레그먼트에 데이터를 전송하는 기능
        Bundle bundle= new Bundle(); //보따리 객체
        bundle.putString("Name""sam");
        bundle.putInt("Age",20);
        fragment.setArguments(bundle);
 
        //begin과 commit 사이에 작업을 코딩
        ft.add(R.id.container,fragment);
 
        //백스택에 넣지 않고 뒤로가기를 누르면
        //액티비티가 바로 꺼짐.(Fragment가 스택에 저장되지 않으므로)
        //프레그먼트를 백스택에 추가시키기.
        ft.addToBackStack(null);
 
        //트랜잭션 작업이 완료되었다고 명령
        ft.commit();
 
    }
}
 
 
 

<실행 화면>

댓글