본문 바로가기
프로젝트 기록/android

[android/안드로이드] Fragment, 액티비티에서 프래그먼트로 정보 전달하기 예제

by 새아SaeA 2020. 1. 10.

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 리스트 프래그먼트 예제

 

[android/안드로이드] Fragment - list fragment 리스트 프래그먼트 예제

List Fragment 만들기 간단 예제 main activity에 바로 화면을 띄울 것임 따로 fragment xml을 작성하지 않아도 됨 기본으로 만들 때에는 따로 MainActivity.java파일을 작성하지 않아도 됨. 1. 결과물 2. 예제..

saeatechnote.tistory.com

/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