마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Fragment와 ViewPager안에 있는 Fragment간의 변수 전달 문제

0 추천

일단 처음 질문이라 설명하는 방법이 이상할질 몰라도 친절한 답변 부탁드립니다.

현재 구성이  Activity 안에 MenuFragment 와 ViewPager(ImageFragment, MapFragment) 가 있습니다.

문제는 MenuFragment에는 인터페이스를 만들어 Activity에 값을 줄수는 있었습니다.

@Override
 public void onClicked(String mark, String ISBN) {
  //ItemMapFragment mapFragment = (ItemMapFragment)getSupportFragmentManager().findFragmentById(R.id.item_pager_fragment);
  ItemImageFragment imageFragment = (ItemImageFragment)getSupportFragmentManager().findFragmentById(R.id.item_pager_fragment);
  Log.d("Q1","ChatActivity onClick Call");
  Log.d("Q1",ISBN);
  //mapFragment.mark(mark);
  imageFragment.bookISBN(ISBN);
 };

여기서 문제가 주석부분을 보면 각각 ViewPager의 id값을 받아 해당 맞는 Fragment를 선택해 그 Fragment의 함수를 호출하여 값을 전달하고 싶은데

this.fragments = new ArrayList<Fragment>();
fragments.add(new ItemImageFragment());
fragments.add(new ItemMapFragment());

pagerAdapter를 이런씩으로 작성해서 위릐 Ativity소스에서 첫번째  추가한 ImageFragment만 값이 제대로 전달 됩니다.

즉 Activity의 주석을 제거하면 MapFragment와 ImageFragment에 각각 String값이 전달 되어야 되는데 되지않습니다.

 

 

* 요약 하자면 하나의 Activity에 Fragment와  ViewPager가 존재하며

ViewPager에는 각각 MapFragment와 ImageFragment가 존재합니다.

여기서 Fragment에서 보내는 두 개의 String값을  MapFragment와 ImageFragment에 어떻게 전달할지 입니다.

 

* 현재 pagerAdapter에서 getItem() 함수로 Fragment를 불러와서 적용하는 시도를 하고 있는데

ItemImageFragment mapFragment2 = (ItemImageFragment)pageAdapter.getItem(1); 

딱히 적용이 안되는 군요... 어떻게 해야 될까요???

Qpang (210 포인트) 님이 2014년 8월 7일 질문

1개의 답변

0 추천
 
채택된 답변

종종쓰는 방법중 하나는 Fragment class안에 생성자같은 매소드를 만들어주는거에요

예를들면 

public class Frag extends Fragment

안에

public static Frag newInstance( String 전달할값 ,String 전달할값)

{

Frag fragment = new Frag ();

Bundle cBundle = new Bundle();

cBundle.putString( "key1",전달할 값 );
cBundle.putStringArray( "key2r", 전달할값2 );
fragment.setArguments(cBundle);
}
해준다음
onCreateView에서 getArgument().getString("key1") 이런식으로 가져오면 됩니다
물론 뷰페이저 어답터는 FragmentStatePagerAdapter 로 바꾸셔야되구요
익명사용자 님이 2014년 8월 8일 답변
Qpang님이 2014년 8월 8일 채택됨
...