728x90
반응형
준비물
- Fragment 3개
- layout 3개(container가 될 레이아웃 1개 + 사용자에게 보여질 뷰로 구성되어 있는 레이아웃 2개)
코드
home_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/home_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</LinearLayout>
Fragment_1.java
public class Fragment_1 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_layout, null, false);
getFragmentManager().beginTransaction().replace(R.id.home_layout, new Fragment_1_Home()).addToBackStack(null).commit();
return view;
}
}
- 아무런 역할 없이 Fragment_1_Home 로 바로 전환됨
Fragment_1_Home.java
public class Fragment_1_Home extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_home_layout, null, false);
List<String> basic_name = new Vector<>();
//basic_name에 데이터 삽입하는 부분 생략
getFragmentManager().beginTransaction().replace(R.id.home_layout,
Fragment_1_Child.newInstance(basic_name.toArray(new String[basic_name.size()]))
.addToBackStack(null)
.commit();
return view;
}
}
- Fragment 에서 Fragment로 데이터를 넘기기 위해선 데이터를 받는 Fragment를 newInstacne로 생성해준다.
- String이나 int 등 기본 자료형을 넘길 땐 간단하다. 그러나 나는 List 형을 넘기고자 했기 때문에 List를 Array로 변환하는 과정이 필요했다.
List<String> to StringArray => List변수.toArray(new String[List변수명.size()])
Fragment_1_Child.java
public class Fragment_1_Child extends Fragment {
public static Fragment_1_Child newInstance(String[] name) {
Bundle args = new Bundle();
args.putStringArray("basic_name", name);
Fragment_1_Child fragment = new Fragment_1_Child();
fragment.setArguments(args);
return fragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_child_layout, null, false);
if (getArguments() != null) {
basic_name = getArguments().getStringArray("basic_name");
}
return view;
}
}
- newInstance를 통해 데이터를 받고 setArguments("key", value)에 저장한 뒤, onCreateView에서 getArgument.getXXX("key")로 꺼내올 수 있다.
728x90
반응형
'공부기록 > 안드로이드' 카테고리의 다른 글
[안드로이드] 뒤로가기(backpressed) 안되는 경우 (0) | 2021.01.28 |
---|---|
[안드로이드] setOnKeyListener 엔터(두 번 실행되는 경우) (0) | 2021.01.28 |
[JSOUP사용법] 웹(HTML) JSOUP으로 파싱하기 (웹-안드로이드 연동/네이티브앱) (0) | 2021.01.27 |
안드로이드 RecyclerView를 이용해 이미지 게시판 만들기(인스타그램 따라해보기) (0) | 2021.01.25 |
안드로이드 프래그먼트 안에 프래그먼트 - 인스타그램처럼 만들기 (0) | 2021.01.25 |