![](/img/trans.png)
[英]Access Fragment Class Method From FragmentActivity Class in Android
[英]Android, Access Fragment method from separate class
我有一个片段 :
public class CustomFrag extends Fragment{
...
public void refreshList(){
...
}
}
我有一个单独的班级 :
public class SomeClass{
...
}
我试图从SomeClass
调用refreshList()
:
String tagName = "android:switcher:" + R.id.pager + ":" + 1;
CustomFrag f2 = (CustomFrag)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);
f2.refreshList();
但是这表明Cannot resolve method 'getActivity'
。 如果我加入课程:
extends Fragment
所有警告消失,但应用程序崩溃, CustomFrag f2 = (CustomFrag)...
行的空指针异常。
我有另一个片段,包含在与CustomFrag
相同的父节点中,并且上面描述的方法调用效果很好。
如何从SomeClass
访问CustomFrag
方法? 这个问题(和类似的问题)都被问到了,但是大多数问题都没有得到接受,或者有一些非常含糊的问题。
提前致谢。
编辑:临时解决方案
我在前面提到的两个片段中调用属于SomeClass
方法。 我想出的是以下内容:
在FragOne
public class FragOne extends Fragment{
...
String tagName = "android:switcher:" + R.id.pager + ":" + 1;
CustomFrag f2 = (CustomFrag)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);
}
然后:
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);
}
那么someMethod
可以使用
f2.refreshList();
这解决了我一直遇到的问题,但是通过一个单独的类来了解更直接的方法来访问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...
}
}
AnotherClass.java
public Class AnotherClass() {
// call this method
HomeFragment.getInstance().myMethod();
}
问题是您需要获取片段的活动上下文。 您不仅可以构建一个扩展片段类的新类,而无需实际实例化片段并将其与活动相关联,并希望从中获取活动上下文。
如果您希望独立于Fragment使用SomeClass
,则可以声明一个变量来保存父活动
private FragmentActivity mActivity;
然后在构造函数中,您可以将活动上下文引用传递给它。
public SomeClass (FragmentActivity activity) {
mActivity = activity;
...
}
之后,你可以打电话
mActivity.getSupportFragmentManager().findFragmentByTag(tagName);
当你在SomeClass
需要它时。
为此创建接口
public interface Callback{
void refreshList();
}
这是你的片段
public class CustomFrag extends Fragment implements Callback{
...
new SomeClass().setListener(CustomFrag .this);
@Override
public void refreshList(){
//do work
}
}
写你的课
public class SomeClass{
private Callback mCallback;
public void setListener(Callback callBack){
mCallback=callBack;
}
}
像你这样从SomeClass调用Fragment refreshListview
mCallback.refreshListView();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.