亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

getActivity()在片段函數中返回NULL

getActivity()在片段函數中返回NULL

慕標琳琳 2019-07-03 16:36:02
我有一個片段(F1),它使用這樣的公共方法public void asd() {     if (getActivity() == null) {         Log.d("yes","it is null");     }}是的,當我叫它(從活動中),它是空的.FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction(); F1 f1 = new F1();transaction1.replace(R.id.upperPart, f1);transaction1.commit();f1.asd();這一定是我做錯了什么,但我不知道那是什么
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

commit調度事務,即它不是直接發生的,而是在主線程下一次準備就緒時作為對主線程的工作進行調度。

我建議增加一個

onAttach(Activity activity)

方法對您的Fragment并在其上放置一個斷點,并查看它何時被調用相對于您對asd()..您將看到在調用的方法之后調用它。asd()出口。這個onAttach呼叫是Fragment與它的活動有關,從這一點開始getActivity()將返回非空(nb也有onDetach()打電話)。


查看完整回答
反對 回復 2019-07-03
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

最好的辦法是在調用onAttach時保留活動引用,并在需要時使用活動引用。

@Overridepublic void onAttach(Context context) {
    super.onAttach(activity);
    mContext = context;}@Overridepublic void onDetach() {
    super.onDetach();
    mContext = null;}


查看完整回答
反對 回復 2019-07-03
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

這發生在你打電話的時候getActivity()在刪除片段后完成的另一個線程中。典型的情況是getActivity()(前。為了Toast)當HTTP請求完成時(在onResponse例如)。

為了避免這種情況,您可以定義一個字段名。mActivity用它代替getActivity()..該字段可以在片段的onAttach()方法中初始化,如下所示:

@Overridepublic void onAttach(Context context) {
    super.onAttach(context);

    if (context instanceof Activity){
        mActivity =(Activity) context;
    }}

在我的項目中,我通常用以下特性為我的所有片段定義一個基類:

public abstract class BaseFragment extends Fragment {

    protected FragmentActivity mActivity;

    @Overridepublic void onAttach(Context context) {
    super.onAttach(context);

    if (context instanceof Activity){
        mActivity =(Activity) context;
    }}}

快樂的編碼,


查看完整回答
反對 回復 2019-07-03
  • 3 回答
  • 0 關注
  • 573 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號