簡體   English   中英

如何將數據從片段發送到另一個活動?

[英]How to send data from fragment to another activity?

我需要將數據從Fragment發送到另一個活動

我在HomeActivity下的LoadsFragment中使用此代碼

Intent intent = new Intent(activity, LoadActivity.class);
intent.putExtra("loadsPosition",position);
activity.startActivity(intent);

在另一個活動(LoadActivity)中接收數據

Intent intent=getIntent();    
String loadsPosition = intent.getStringExtra("loadsPosition");

但意圖沒有額外

請看下面的截圖

從片段發送意圖 在第二活動中獲得額外獎勵 在此處輸入圖片說明

但意圖沒有額外

您的屏幕截圖顯示確實如此...

您的第二個屏幕截圖顯示了processIntent(Bundle bundle) ,但是第三個屏幕截圖顯示了processIntent(Intent intent) ,因此您應該弄清楚哪個不起作用。 但是,兩個捆綁包都不為空。

片段具有自己的startActivity方法。 您只需要父活動來創建意圖

Intent intent = new Intent(getActivity(), LoadActivity.class);
intent.putExtra("loadsPosition",position);
startActivity(intent);

最重要的是,您的位置是整數,但是您嘗試將其作為字符串獲取,因此該字符串將為null

Intent intent=getIntent();    
int loadsPosition = intent.getIntExtra("loadsPosition", -1);

Intent不應為null,並且應具有Bundle。 如果此整數返回-1,則返回了默認值,您應該使用較小的示例調試更多內容

嘗試使用接口。

任何應將數據傳遞回其HomeActivity的片段都應聲明一個接口來處理和傳遞數據。 然后,確保您的HomeActivity實現了這些接口。 例如:

在您的片段中,聲明接口...

public interface OnDataPass {
    public void onDataPass(String data);
}

然后,將HomeActivity類的接口實現連接到onAttach方法中的片段,如下所示:

OnDataPass dataPasser;

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    dataPasser = (OnDataPass) context;
}

在片段中,當您需要處理數據傳遞時,只需在dataPasser對象上調用它即可:

public void passData(String data) {
    dataPasser.onDataPass(data);
}

最后,在實現OnDataPass的HomeActivity中...

@Override
public void onDataPass(String data) {
    Log.d("LOG","hello " + data);
}

您可以這樣嘗試一下,看看是否有其他功能:

  1. 創建意圖時: Intent intent = new Intent(this, LoadActivity.class);

  2. 但是最有可能您正在處理getExtras()而不是意圖本身。

    try{ processIntent(getIntent()); }catch(JSONException e){ ...

您沒有將附加內容附加到您的意圖上:

Intent intent = new Intent(activity.this, LoadActivity.class);
Bundle bundle = new Bundle();
bundle.putInt("loadsPosition",pos);
intent.putExtras(bundle);
activity.startActivity(intent);

要么:

Intent intent = new Intent(activity.this, LoadActivity.class);
intent.putExtra("loadsPosition",pos);
activity.startActivity(intent);

片段使用

Intent intent = new Intent(getActivity, LoadActivity.class);
intent.putExtra("loadsPosition",position);
activity.startActivity(intent);

在LoadActivity中

String loadsPosition = getIntent().getStringExtra("loadsPosition");

您可以使用Local Broad Cast接收器或接口將數據從片段傳遞到活動。

您還可以直接獲取片段中活動的意圖額外數據。 如果您的活動意圖中包含數據,請在片段中使用以下代碼:

Intent intent = getIntent().getStringExtra("position");

活動1片段:

 Intent intent = new Intent(getActivity(), SecondActivity.class);
 intent.putExtra("message", data); 
 startActivity(intent);

在第二活動片段中,以這種方式檢索

 SecondActivity activity = (SecondActivity) getActivity();
 String data= activity.getIntent().getExtras().getString("message");

暫無
暫無

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

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