Передать String путь из одного Activity в другое

Пересылаю разными, что нашел, способами String path из FragmentActivity в MainActivity, а в MainActivity всё равно null. В чем моя ошибка?
FragmentActivity:

Intent intentPath;
MainActivity mainActivity = new MainActivity();
@Override
public void PickiTonCompleteListener(String path) {
    if (mainActivity.file1 == 1) {
        intentPath = new Intent(this, MainActivity.class);
        intentPath.putExtra("pathFile1", path); // первый вариант попытки передать path
        mainActivity.FilePath1 = path; // второй вариант попытки передать path
    }
    ...
}

MainActivity:

@Override
public void PickiTonCompleteListener(String path) {
    if (file1 == 1) {
        FilePath1 = path; // здесь всегда получается null (попытка: mainActivity.FilePath1 = path;)
        FilePath = FilePath1;
        System.out.println(pathGetFile2 = getIntent().getStringExtra("pathFile2")); // здесь всегда получается null (попытка: intentPath.putExtra("pathFile1", path);)
    }
    ...
}

Изначально задача составляет передать путь (path) из FragmentActivity в MainActivity для последующей обработки пути в мэйн активити


Ответы (1 шт):

Автор решения: mrtwon

Скорее всего из-за того что FilePath1 у MainActivity не является статическим полем, данные передаются в другой объект который создаётся в самом фрагменте.

Я сам новичок но могу посоветовать вам использовать ViewModel из Architecture Components для хранения общих данных, либо как вариант можно обратиться к Activity из Framgent - во фрагменте это можно сделать через requireActivity()

вариант с обращением к Activity из Fragment:

(requireActivity() as MainActivity).PickiTonCompleteListener("your_string)

вариант с ViewModel:

Класс ViewModel

class MyViewModel: ViewModel(){
    val FilePath1 = MutableLiveData<String>()
} 

класс MainActivity:

class MainActivity: AppCompatActivity() {
    val vm: MyViewModel by lazy { ViewModelProvider(this).get(MyViewModel::class.java) }

    override fun onCreate(savedInstanceState: Bundle?) {
        setContentView(R.layout.activity_main)
        // other your code
        observer()
        super.onCreate(savedInstanceState)
    }
    private fun observer(){
        vm.FilePath1.observe(this, Observer<String> {
            //give your data from fragment
        })
    }
}
→ Ссылка