Android,来自单独类的访问片段方法

Bir*_*rel 3 java android method-call android-fragments

我有一个片段

public class CustomFrag extends Fragment{
    ...
    public void refreshList(){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个单独的

public class SomeClass{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试refreshList()SomeClass以下位置致电:

String tagName = "android:switcher:" + R.id.pager + ":" + 1;
CustomFrag f2 = (CustomFrag)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);
f2.refreshList();
Run Code Online (Sandbox Code Playgroud)

但这说明Cannot resolve method 'getActivity'。如果我添加到类:

extends Fragment
Run Code Online (Sandbox Code Playgroud)

所有警告都消失了,但应用程序崩溃,该CustomFrag f2 = (CustomFrag)...行出现空指针异常。

我有另一个片段,包含在与 相同的父级中CustomFrag,并且上述方法调用效果很好。

我怎样才能访问这些CustomFrag方法SomeClass?这个问题(和类似问题)被问遍了,但大多数都没有接受答案,或者有非常模糊的没有帮助的答案。

提前致谢。

编辑:临时解决方案

我正在调用属于SomeClass上述两个片段中的方法。我想出的是以下内容:

之内 FragOne

public class FragOne extends Fragment{

    ...

    String tagName = "android:switcher:" + R.id.pager + ":" + 1;
    CustomFrag f2 = (CustomFrag)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);
}
Run Code Online (Sandbox Code Playgroud)

进而:

public class FragOne extends Fragment{

    ...

    String tagName = "android:switcher:" + R.id.pager + ":" + 1;
    CustomFrag f2 = (CustomFrag)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);

    SomeClass obj = new SomeClass(...);
    obj.someMethod(f2);
}
Run Code Online (Sandbox Code Playgroud)

someMethod那么在哪里可以使用

f2.refreshList();
Run Code Online (Sandbox Code Playgroud)

这解决了我一直遇到的问题,但知道一种更直接的方法来通过单独的类访问 Fragment 的方法仍然会很好。

欢迎进一步解决此问题的答案,并将被接受为解决方案。

Aha*_*kat 8

HomeFragment.java

public class HomeFragment extends Fragment {

    private static HomeFragment instance;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);

        instance = this;

        return view;
    }

    public static HomeFragment getInstance() {
        return instance;
    }

    public void myMethod() {
        // do something...
    }

}
Run Code Online (Sandbox Code Playgroud)

另一个类.java

public Class AnotherClass() {
     // call this method
     HomeFragment.getInstance().myMethod();
}
Run Code Online (Sandbox Code Playgroud)