Как сделать так, чтобы Activity вызывала метод в классе Fragment, если я использую Navigation Drawer - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу вызвать метод в классе Fragment из Activity. Использование getFragmentManager().findFragmentById(R.id.example_fragment)

вызывало ошибку

Attempt to invoke virtual method 'void com.package.name.HomeFragment.functionName()' on a null object reference.

Я думаю, что это может быть связано с тем, что я использую Навигационный ящик, поэтому Я не запускаю getSupportFragmentManager.beginTransaction.add(fragmentStuff).commit(); напрямую, но не уверен, как исправить эту ошибку.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

У меня такое ощущение, что вы рассматриваете свой фрагмент как класс java, в качестве интерфейса следует использовать фрагмент .

Вы можете попробовать что-то

MyFragment фрагмент = новый MyFragment (); fragment.myMethod ();

0 голосов
/ 21 апреля 2020

Вы должны добавить фрагмент в действие перед вызовом его метода.

Существует два способа найти фрагмент и вызвать его метод:

Первый:

ExampleFragment fragment = (ExampleFragment)getFragmentManager().findFragmentById(R.id.example_fragment);

if(fragment.isAdded()){
    fragment.functionName(); 
}

Второе:

ExampleFragment fragment = (ExampleFragment)getFragmentManager().findFragmentByTAG("tagofExampleFragment");

if(fragment.isAdded()){
    fragment.functionName(); 
}
...