activitiy에서 fragment로 정보 전달하기
1. activitiy에서 fragment로 정보 전달하는 4가지 방법
1) 생성자에 인자로 전달
2) 객체를 생성하는 메서드에 인자로 전달
- new Instance()와 같은 method를 fragment에 선언하고, 이 method에 데이터를 전달하면서 fragment 객체를 생성하는 방법
3) 프래그먼트에 인자로 전달
- 프래그먼트에서 제공하는 setArguments() method로 데이터를 설정한 후에 fragment에서 데이터를 꺼내서 사용하는 방법
4) static 변수로 공유
- 별도 클래스를 작성하고 변수들을 static으로 선언하는 방법. 이렇게 선언한 변수는 어느 클래스에서도 접근할 수 있다.
*방법 3)만 안드로이드에서 제공하는 방식이고, 나머지 방법 1,2,4는 java문법을 기반으로 한 방식이다.
2. 예제 코드
/res/layout/activity_main.xml (아래 포스팅 참고)
[프로젝트 기록/android] - [android/안드로이드] Fragment - list fragment 리스트 프래그먼트 예제
/java/com.example.fragmentdemo/MainActivity.java
package com.example.fragmentdemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main); 삭제
//자바 코드에서 프래그먼트 추가하는 방법
ArrayList list = new ArrayList();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(android.R.id.content, list);
ft.commit();
//액티비티에서 프래그먼트로 데이터 전달 하는 경우 (위에 코드를 작성해야만 오류 없이 실행 됨)
String[] numbers = new String[] {"1","2","3","4","5","6"};
Bundle bundle = new Bundle();
bundle.putStringArray("numbers", numbers);
list.setArguments(bundle);
}
}
/java/com.example.fragmentdemo/ArrayList.java
package com.example.fragmentdemo;
import ...
public class ArrayList extends ListFragment {
//이전 예제에서 부분 변경
public String[] getNumbers() {
return getArguments().getStringArray("numbers");
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_activated_1, getNumbers())); //이전 예제에서 getNumbers()만 변경
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
@Override
public void
onListItemClick(ListView I, View v, int position, long id) {
getListView().setItemChecked(position, true);
}
}
참고
edwith.org
'프로젝트 기록 > android' 카테고리의 다른 글
[android/안드로이드] Relative Layout/margin이 적용되지 않는다. +오류상황 (0) | 2020.01.17 |
---|---|
[android/안드로이드] file name 파일이름 (0) | 2020.01.17 |
[android/안드로이드] Fragment - list fragment 리스트 프래그먼트 예제 (0) | 2020.01.10 |
[android/안드로이드] full screen 전체화면 예제 (0) | 2020.01.09 |
[android/안드로이드] WebView 웹뷰 예제 (1) | 2020.01.09 |