簡體   English   中英

將值從 Activity 傳遞到 Fragment

[英]Passing values from Activity to Fragment

登錄我的應用程序后,我正在使用導航抽屜。 在 Navigation drawer 中,我使用了一個名為“profile”的片段來顯示用戶信息。 我想將數據從登錄頁面活動傳遞到配置文件片段。

Bundle bundle = new Bundle();
Intent home =  new Intent(LoginPage.this, HomeActivity.class);
startActivity(home);
bundle.putString("name", gname);
Profile profile = new Profile();
profile.setArguments(bundle);

這是我的個人資料片段:

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    name = this.getArguments().getString("name");
    ntext.setText(name);

    return inflater.inflate(R.layout.activity_profile, container, false);
}

但我收到空指針異常。 我不明白有什么問題! 如果有另一種方法可以將數據從活動傳遞到片段,請告訴我!

您需要在 Profile 片段中創建一個名為 newInstance 的函數,該函數創建片段並通過那里設置參數,然后返回帶有參數的片段。 像這樣

public static Profile newInstance(String name){
    Profile profile = new Profile();
    Bundle bundle = new Bundle();
    bundle.putString("name", name);
    profile.setArguments(bundle);
    return profile;
}

然后像這樣在您的活動中創建片段

Profile profile = Profile.newInstance(gname);

並獲取您在片段中的 onCreate 中所做的參數。

您還應該在您正在使用它的活動中創建 Fragment。因此,如果它在您的家庭活動中,您將希望傳遞來自登錄活動的數據,然后在 onCreate 中為家庭活動構建片段。

Intent home = new Intent(this, HomeActivity.class);
intent.putExtra("name", gname);
startActivity(home);

在家庭活動中

Bundle extras = getIntent().getExtras();
String gname = extras.getString("name");
Profile profile = Profile.newInstance(gname);

在 Kotlin 中,您可以像這樣從片段訪問活動變量

(activity as ActivityClassName).variableName

我在Java方面沒有太多經驗,但我相信這是將代碼翻譯成Java

((ActivityClassName) getActivity()).variableName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM