我有一个有两个活动的应用程序。在主要活动中,我使用startActivityForResult()
开始了一项辅助活动。辅助活动将数据(以Intent
对象的形式)返回到主活动。在主要活动中,我有一个方法onActivityResult()
来处理从次要活动回来的。
在这个onActivityResult()
方法中,我需要更新主活动的View
(以反映新的数据值)。我没有显式生成任何线程。我的问题是:我可以直接从onActivityResult()
方法中修改视图,还是需要在UI队列中放置一个事件来执行此操作?更明确一点:我可以确定onActivityResult()
方法在UI线程上,在这种情况下我可以忘记UI队列吗?
答案 0 :(得分:11)
是的,您可以修改onActivityResult()
中的视图。只要您在UI线程上运行,就可以在Activity
中调用setContentView()
后随时修改onCreate()
的视图。
是的,在UI线程上调用onActivityResult()
。对于所有生命周期方法(onCreate()
,onResume()
等)都是如此。
答案 1 :(得分:2)
onActivityResult()在UI线程中执行,您可以修改此方法的视图。
答案 2 :(得分:0)
当我尝试在onActivityResult()上创建并显示AlertDialog时,我会收到一个“android.view.WindowLeaked”错误 android.view.WindowLeaked:
活动com ... MainActivity泄露了窗口com.android.internal.policy.impl.PhoneWindow $ DecorView {37ac7e30 V.E ..... R ..... I。最初添加的0,01272,584}
一旦我尝试显示对话框。
所以我认为假设OnActivityResult()在主线程上运行并不总是可以的。
答案 3 :(得分:0)
在当前片段中 AddNewAccountFragment
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == Constants.CHOOSE_BANK_REQUEST_CODE) {
bankName = data.getStringExtra("BANK_NAME");
if (!TextUtils.isEmpty(bankName)) {
mChooseBankEdittext.setText(bankName);
mReceivedBankName = bankName;
}
}
}
}
// if sending data from next fragment to previous fragment using OnActivityResult.
在 OnResume 上的Edittext上的setText。
@Override
public void onResume() {
super.onResume();
mChooseBankEdittext.setText(bankName);
}
在目标片段中 ChooseBankNameFragment
在Fragment
中的onClick()下执行
Intent intent = new Intent(getActivity(), AddNewAccountFragment.class);
intent.putExtra("BANK_NAME", bankName);
if (getFragmentManager().findFragmentByTag("AddNewAccountFragment") != null)
getFragmentManager().findFragmentByTag("AddNewAccountFragment").onActivityResult(Constants.CHOOSE_BANK_REQUEST_CODE, RESULT_OK, intent);
getActivity().getSupportFragmentManager().popBackStack();