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

Activity의 하위 Fragment에 메소드를 Activity에서 사용하기

0 추천

??? 표기 한 부분에서 fragment에 있는 메소드를 사용하고 싶은데 

방법을 조언해주실수 있을까요??

 

fragment에서 activity 메소드 사용할때는 

public class MainActivity extends AppCompatActivity {

 MainActivity main;

@override
protected voidonCreate(Bundle savedInstanceState) {
 main = (MainActivitiy) getActivity()

 main.activityMethod();
}

}

이렇게 하던데 거꾸로 Activity에서 fragment에 메소드에 접근 하고 싶습니다..

따블이 (260 포인트) 님이 2017년 2월 9일 질문

1개의 답변

0 추천

방법이야 많은데 알아서 선택해서 쓰세용.

1. Fragment를 멤버로 둔다.

class MainActivity extends Activity{

 MyFragment mMyFragment;


 public void func(){
  mMyFragment.함수();
 }

}

2. Fragment를 transaction에 포함할때 태그를 추가한다.

        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.LinearLayout, new MyFragment(), "이거슨태그");

        .
        .
        .
        
        Fragment fragment = getSupportFragmentManager().findFragmentByTag("이거슨태그");
        if(fragment instanceof MyFragment){
            ((MyFragment)fragment).함수();
        }

3. FragmentManager로부터 transaction에 포함된 Fragment리스트를 사용한다.

 FragmentManager fragmentManager = getSupportFragmentManager();
        List<Fragment> fragmentList = fragmentManager.getFragments();

        for(Fragment fragment : fragmentList){
            if(fragment instanceof MyFragment){
                //추가적으로 원하는 fragment를 특정하기 위한 조건을 걸수도 있음
                ((MyFragment)fragment).함수();
            }
        }

 

Development Guy (70,570 포인트) 님이 2017년 2월 9일 답변
와... 다양한 사용법까지~!  감사합니다!!!!
만약 레아아웃 리소스에 추가하여 사용중인 상황이라면
        FragmentManager fragmentManager = getSupportFragmentManager();
        MyFragment myFragment = (MyFragment) fragmentManager.findFragmentById("리소스 아이디");
        myFragment.이거슨함수();

이렇게 쓰셔도 되구요.
답변자님 정보 정말 감사합니다 댓글로 알려주신 데로 진행을 해보았는데요..
 말씀해주신데로 정상적으로 진행하였는데 MyFragment.메소드를 사용하니 .

Attempt to invoke virtual method 'void kr.co.open_it.smart_car_kit.subView.WebViewFragment.playWebView(java.lang.String)' on a null object reference

오류가 뜨면서 MyFragment.메소드 부분을 가리킵니다 ㅠㅠ;;;
...