![](/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.