簡體   English   中英

有沒有辦法在一個片段中從多個活動中獲取數據?

[英]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 活動作為父AB以及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.

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