Передать 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 шт):
Скорее всего из-за того что 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
})
}
}