У меня есть активность, которая управляет четырьмя фрагментами через ViewPagerAdapter. С моей деятельности, я хочу, чтобы вызвать метод:Вызов нестационарного метода в фрагменте из активности?
public void openButtons(){
//mPosition is a position of pager
if (mPosition==0){
Fragment1 fragment = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1);
fragment.openButtons();
}
if (mPosition==1){
Fragment2 fragment = (Fragment2) getSupportFragmentManager().findFragmentById(R.id.fragment2);
fragment.openButtons();
}
if (mPosition==2){
....
}
if (mPosition==3){
...
}
}
Если метод в моем фрагменте определяется как нестатическая:
public void openButtons(){//some stuff}
Я получаю NullPointer для fragment.openButtons() линии и это независимо от позиции и фрагмента.
Если метод объявлен как статический, это нормально.
public static void openButtons(){//some stuff}
Содержание метода не подлежит сомнению, так как проблема одинаков с пустым методом.
Итак, мой вопрос в том, почему мы должны определить статический метод в фрагменте?
«Причина в этих условиях:
public void openButtons(){
//mPosition is a position of pager
if (mPosition==0){
Fragment1.openButtons()
}
if (mPosition==1){
Fragment2.openButtons()
}
if (mPosition==2){
....
}
if (mPosition==3){
...
}
}
одинаково функциональны!
Спасибо.
Почему бы вам не сделать ссылку на статический объект для конкретного фрагмента? и с этим объектом вы можете вызвать любой метод в фрагменте. нет необходимости определять статический метод. – user3819810
См. [Эта ссылка] (http://stackoverflow.com/questions/10903077/calling-a-fragment-method-from-a-parent-activity) может помочь вам. – Pankaj
делает 'getSupportFragmentManager(). FindFragmentById (R.id.fragment1);' return null? – Altoyyr