반응형
이번 예제는 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"?>
xmlns:app="http://schemas.android.com/apk/res-auto"
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"?>
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
|
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
|
package com.lcw.ex44fragment2;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
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" 키 값이 없으면 "익명"으로
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
|
package com.lcw.ex44fragment2;
import android.os.Bundle;
import android.view.SurfaceControl;
import android.view.View;
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");
fragment.setArguments(bundle);
//begin과 commit 사이에 작업을 코딩
ft.add(R.id.container,fragment);
//백스택에 넣지 않고 뒤로가기를 누르면
//액티비티가 바로 꺼짐.(Fragment가 스택에 저장되지 않으므로)
//프레그먼트를 백스택에 추가시키기.
ft.addToBackStack(null);
//트랜잭션 작업이 완료되었다고 명령
}
}
|
<실행 화면>
반응형
'안드로이드 웹앱 콘테츠 개발자 양성(국비지원) > Fragment' 카테고리의 다른 글
Android Studio(화면) PreferenceFragment (설정화면 & 저장) (4) | 2019.10.29 |
---|---|
Android Studio Fragment + Pager 2 (0) | 2019.09.26 |
Android Studio Fragment + Pager 1 (0) | 2019.09.26 |
Android Studio Fragment 1(View+Activity) (0) | 2019.09.26 |
댓글