[英]Is there a way to get data from multiple Activity in a single Fragment?
我在用戶活動中有一個片段,它打開了一個 Map 活動以接收一些字符串變量。片段已使用捆綁包從用戶活動中收到 2 個字符串變量。
這是我這樣做的方法,但我不斷收到該錯誤:
這就是我得到的錯誤,把我踢了出去
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.project_seraphim_disease_tracker, PID: 17049
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null,
request=66738, result=-1, data=Intent { (has extras) }} to activity
{com.example.project_seraphim_disease_tracker/com.example.project_seraphim_diseas
e_tracker.User}: java.lang.NullPointerException: Attempt to invoke virtual method
'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference
這些都在 Map 活動和用戶活動中的片段中
private static final String SEARCHED_ADDRESS = "searched_address";
private static final String SEARCHED_NAME = "searched_address_name";
private LatLng SearchedLocationlatLng;
private String SearchedlocationAddress;
private String SearchedlocationName;
這是從用戶活動中的片段調用 Map 活動的按鈕
btnAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(),Map.class);
startActivityForResult(intent,IDENTIFIER);
}
});
這是我用來接收字符串的
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (IDENTIFIER) : {
if (resultCode == Map.RESULT_OK) {
SearchedlocationAddress=data.getStringExtra(SEARCHED_ADDRESS);
SearchedlocationName=data.getStringExtra(SEARCHED_NAME);
editTextSearchLocationBar.setText(SearchedlocationName);
}
break;
}
}
}
這是用於傳遞字符串的 Map 活動
btnConfirmAddress.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent resultIntent = new Intent();
resultIntent.putExtra(SEARCHED_NAME,SearchedlocationName);
resultIntent.putExtra(SEARCHED_ADDRESS,SearchedlocationAddress);
setResult(Map.RESULT_OK, resultIntent);
finish();
}
在這個舊帖子上找到了解決方案,但它仍然有效。
https://stackoverflow.com/a/16449850/13594169
基本上,當我在片段中調用 startActivityForResult 時,父活動(在我的情況下,用戶活動首先處理數據)然后我必須從那里將數據傳遞給片段。
Imagein 活動作為父A和B以及A中的片段作為子A.1 。 子A.1從父B請求數據。 父B將數據提供給父A ,父A收到數據后,將其傳遞給子A.1 。
所以在從片段 A.1 調用之后
startActivityForResult(intent,IDENTIFIER);
將其放在活動 B 中以傳遞所需的數據
Intent resultIntent = new Intent();
resultIntent.putExtra(key_word,String);
setResult(Map.RESULT_OK, resultIntent);
將其放入活動 A 以處理從活動 B 接收到的數據
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Fragment fragment = (Fragment) getChildFragmentManager().findFragmentByTag(childTag);
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, intent);
}
}
//If you have your child Fragment as a private member,
//then use Fragment fragment = myChildFragment;
//to replace the above findFragmentByTag line of code. The rest can be kept unchanged
然后把它放在片段 A.1 中以接收來自 Activity B 的數據源
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (IDENTIFIER) : {
if (resultCode == Map.RESULT_OK) {
//Assign data
//Update Ui
}
break;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.