[英]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);
}
您可以這樣嘗試一下,看看是否有其他功能:
創建意圖時: Intent intent = new Intent(this, LoadActivity.class);
但是最有可能您正在處理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.