![](/img/trans.png)
[英]NullPointerException when calling a Fragment method from Activity?
[英]Calling a function when an activity is returned to from fragment
我有一個片段,我在onCreate
活動中這樣稱呼它
android.app.FragmentManager fragmentManager = getFragmentManager();
DeviceControlFragment newFragment = new DeviceControlFragment();
newFragment.device = device;
fragmentManager.beginTransaction()
.replace(R.id.content_frame, newFragment)
.commit();
在片段中,我可以彈出堆棧或像這樣回擊:
getFragmentManager().popBackStack();
要么
getActivity().onBackPressed();
但是我在活動中需要一些東西,以便我知道我們已經返回那里,是否存在類似於onActivityResult
東西,我可以在活動中覆蓋它,以了解片段何時“完成”
在片段內部聲明一個接口,並在您的活動中實現該接口,並在片段的onDetach()
, onDestroy
或onPaused
方法中發送對活動的響應,其中任何一種都適合您。 我更喜歡onDetach
或onDestroy
這是該示例:
public class MyFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
private Test mListener;
public interface Test{
void imLeavingYou();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mListener = (Test) context;
}
@Override
public void onDetach() {
super.onDetach();
if(mListener != null){
mListener.imLeavingYou();
}
}
}
然后在您的Activity
執行以下操作:
public class MyActivity extends AppCompatActivity implements MyFragment.Test {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
public void imLeavingYou() {
// Okay thanks for informing
}
}
您可能應該在片段管理器上設置onBackStackChanged()偵聽器。
例:
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
//here you can check stuff. like:
final Fragment mCurrentFragment = getFragmentManager().findFragmentById(R.id.container);
//or get the number of fragments currently on your stack:
getFragmentManager().getBackStackEntryCount()
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.