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 的方法仍然会很好。
欢迎进一步解决此问题的答案,并将被接受为解决方案。
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)
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |