Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从活动中调用片段中的非静态方法?_Java_Android_Android Fragments_Android Viewpager_Static Methods - Fatal编程技术网

Java 从活动中调用片段中的非静态方法?

Java 从活动中调用片段中的非静态方法?,java,android,android-fragments,android-viewpager,static-methods,Java,Android,Android Fragments,Android Viewpager,Static Methods,我有一个活动,通过ViewPagerAdapter管理四个片段。 在我的活动中,我想调用一个方法: public void openButtons(){ //mPosition is a position of pager if (mPosition==0){ Fragment1 fragment = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1); fra

我有一个活动,通过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}
我得到了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){
        ...
    }

}
功能相同


谢谢。

将null强制转换为引用不会引发异常,而对原语则会引发异常

使用findFragmentById()或findFragmentByTag()获取引用并检查其是否为null,如果不是,请检查引用的isAdded()或isVisible()


将null强制转换为引用不会引发异常,而将其转换为基元则会引发异常

使用findFragmentById()或findFragmentByTag()获取引用并检查其是否为null,如果不是,请检查引用的isAdded()或isVisible()


将null强制转换为引用不会引发异常,而将其转换为基元则会引发异常

使用findFragmentById()或findFragmentByTag()获取引用并检查其是否为null,如果不是,请检查引用的isAdded()或isVisible()


将null强制转换为引用不会引发异常,而将其转换为基元则会引发异常

使用findFragmentById()或findFragmentByTag()获取引用并检查其是否为null,如果不是,请检查引用的isAdded()或isVisible()

所以,, 在viewPager的情况下,通过id或标记查找片段的实例不是正确的方法

最好执行以下操作:

public void openButtons() {
    // mPosition is a position of pager

    ViewPagerAdapter adapter = ((ViewPagerAdapter) mViewPager.getAdapter());

    if (mPosition == 0) {
        Fragment fragment = adapter.getItem(0);
        ((Fragment1)fragment).openButtons();
    }

    if (mPosition == 1){
        Fragment fragment = adapter.getItem(1);
        ((Fragment2)fragment).openButtons();
    }

    if (mPosition == 2){
        ....
    }

    if (mPosition == 3){
        ...
    }
}
谢谢。因此, 在viewPager的情况下,通过id或标记查找片段的实例不是正确的方法

最好执行以下操作:

public void openButtons() {
    // mPosition is a position of pager

    ViewPagerAdapter adapter = ((ViewPagerAdapter) mViewPager.getAdapter());

    if (mPosition == 0) {
        Fragment fragment = adapter.getItem(0);
        ((Fragment1)fragment).openButtons();
    }

    if (mPosition == 1){
        Fragment fragment = adapter.getItem(1);
        ((Fragment2)fragment).openButtons();
    }

    if (mPosition == 2){
        ....
    }

    if (mPosition == 3){
        ...
    }
}
谢谢。因此, 在viewPager的情况下,通过id或标记查找片段的实例不是正确的方法

最好执行以下操作:

public void openButtons() {
    // mPosition is a position of pager

    ViewPagerAdapter adapter = ((ViewPagerAdapter) mViewPager.getAdapter());

    if (mPosition == 0) {
        Fragment fragment = adapter.getItem(0);
        ((Fragment1)fragment).openButtons();
    }

    if (mPosition == 1){
        Fragment fragment = adapter.getItem(1);
        ((Fragment2)fragment).openButtons();
    }

    if (mPosition == 2){
        ....
    }

    if (mPosition == 3){
        ...
    }
}
谢谢。因此, 在viewPager的情况下,通过id或标记查找片段的实例不是正确的方法

最好执行以下操作:

public void openButtons() {
    // mPosition is a position of pager

    ViewPagerAdapter adapter = ((ViewPagerAdapter) mViewPager.getAdapter());

    if (mPosition == 0) {
        Fragment fragment = adapter.getItem(0);
        ((Fragment1)fragment).openButtons();
    }

    if (mPosition == 1){
        Fragment fragment = adapter.getItem(1);
        ((Fragment2)fragment).openButtons();
    }

    if (mPosition == 2){
        ....
    }

    if (mPosition == 3){
        ...
    }
}


谢谢。

为什么不对特定片段进行静态对象引用?使用该obj,您可以调用片段中的任何方法。无需定义静态方法。请参阅可能有帮助。does
getSupportFragmentManager().findFragmentById(R.id.fragment1)返回null?从FragmentManager获取fragment对象,然后调用非静态方法。可能强制转换可以帮助您:((Fragment1)fragment.openButtons();这在我的例子中是有效的,为什么不对特定片段进行静态对象引用呢?使用该obj,您可以调用片段中的任何方法。无需定义静态方法。请参阅可能有帮助。does
getSupportFragmentManager().findFragmentById(R.id.fragment1)返回null?从FragmentManager获取fragment对象,然后调用非静态方法。可能强制转换可以帮助您:((Fragment1)fragment.openButtons();这在我的例子中是有效的,为什么不对特定片段进行静态对象引用呢?使用该obj,您可以调用片段中的任何方法。无需定义静态方法。请参阅可能有帮助。does
getSupportFragmentManager().findFragmentById(R.id.fragment1)返回null?从FragmentManager获取fragment对象,然后调用非静态方法。可能强制转换可以帮助您:((Fragment1)fragment.openButtons();这在我的例子中是有效的,为什么不对特定片段进行静态对象引用呢?使用该obj,您可以调用片段中的任何方法。无需定义静态方法。请参阅可能有帮助。does
getSupportFragmentManager().findFragmentById(R.id.fragment1)返回null?从FragmentManager获取fragment对象,然后调用非静态方法。可能强制转换可以帮助您:((Fragment1)fragment.openButtons();这在我的情况下是有效的。我不理解你对链接的解释,即该方法应该被称为静态的??不一定该方法是静态的。你必须调用fragment方法,因此你必须检查fragment是否为null,并且fragment是否已添加并处于活动状态,然后你必须调用fragment方法。因此,在上面的代码中,我要检查所有这些条件,这正是我所不理解的:如果不是静态的,则NullPointer执行选项针对的是该方法被视为null!那么为什么我没有空指针:Fragment1 fragment=(Fragment1)getSupportFragmentManager()findframentbyid(R.id.Fragment1)。当方法是静态的,反之亦然,当方法不是静态的!在代码中,函数:onNotificationListener在哪里?非常感谢您的帮助…在我的例子中,片段必须是活动的,因为它是由viewPager管理的。当我从父活动调用该方法时,该片段是可见的。我不理解您对链接的解释,即该方法应被称为静态的??不必说该方法是静态的。您必须调用fragment方法,因此必须检查该片段是否为空,以及该片段是否已添加并处于活动状态,然后您必须因此,在上面的代码中,我必须检查所有这些条件,这正是我不理解的:如果不是静态的,则NullPointer执行选项以该方法为目标,并将其视为null!那么为什么我没有空指针:Fragment1 fragment=(Fragment1)getSupportFragmentManager()findframentbyid(R.id.Fragment1)。当方法是静态的,反之亦然,当方法不是静态的!在代码中,函数:onNotificationListener在哪里?非常感谢您的帮助…在我的例子中,片段必须是活动的,因为它是由viewPager管理的。当我从父activityI调用该方法时,该片段是可见的