Есть ли способ получить данные из нескольких действий в одном фрагменте? - PullRequest
1 голос
/ 27 мая 2020

У меня есть фрагмент действия пользователя, который открывает действие карты для получения некоторых строковых переменных. Фрагмент уже получил 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

Они находятся как в действии карты, так и в Фрагмент, который находится в активности пользователя

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;

Это кнопка, которая вызывала действие карты из фрагмента, который находится в активности пользователя

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;
        }
    }
}

Это в действии карты для передачи строк

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();

    }

1 Ответ

1 голос
/ 29 мая 2020

Решение было найдено в этом старом сообщении, но оно все еще работает.

{ ссылка }

в основном Когда я вызываю startActivityForResult во фрагменте, родительская активность (Inmy если активность пользователя сначала обрабатывает данные) Затем оттуда я должен передать данные фрагменту.

Действия 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, чтобы получить данные из Деятельность 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...