我如何才能从第二个活动中获得活动结果



从片段我开始了FirstActivity,从FirstActivity我开始了一个SecondActivity.如何从SecondActivity获得onActivityResult在片段中。 我试图在firstActivity中添加android:noHistory="true"。

有没有办法做到这一点? 提前致谢

片段活动

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
hotelImageMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(myContext, HotelsByLocation.class);
intent.putExtra(HotelActivity.EXTRA_PARAM_FOR_RESULT, true);
intent.putExtra(HotelsByLocation.EXTRA_PARAM_LOCATION_NAME, App.getInstance().getDayList().get(AddHotels.viewPager.getCurrentItem()).get(App.HASHMAP_PARA_CITY_NAME));
intent.putExtra(HotelsByLocation.EXTRA_PARAM_LOCATION_ID, App.getInstance().getDayList().get(AddHotels.viewPager.getCurrentItem()).get(App.HASHMAP_PARA_CITY_ID));
startActivityForResult(intent, MY_REQUEST_CODE_TWO);
}
});

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MY_REQUEST_CODE_TWO) {
if (resultCode == Activity.RESULT_OK) {
Toast.makeText(myContext, "Welcome Back from HotelsByLocation", Toast.LENGTH_SHORT).show();
HashMap<String, String> map = new HashMap<String, String>();
map.put(App.HASHMAP_PARA_CITY_NAME, data.getStringExtra("cname"));
map.put(App.HASHMAP_PARA_CITY_ID, data.getStringExtra("cid"));
map.put(App.HASHMAP_PARA_HOTEL_NAME, data.getStringExtra("name"));
map.put(App.HASHMAP_PARA_HOTEL_IMAGE, data.getStringExtra("img"));
App.getInstance().getDayList().set(AddHotels.viewPager.getCurrentItem(),map);
hotel_name_main.setText(data.getStringExtra("name"));
Picasso.with(myContext)
.load(data.getStringExtra("img"))
.error(R.drawable.ic_empty)
.placeholder(R.drawable.ic_empty)
.into(hotelImageMain);
}
} else if (resultCode == Activity.RESULT_CANCELED) {
// some stuff that will happen if there's no result
Toast.makeText(myContext, "you haven't selected", Toast.LENGTH_SHORT).show();
}
}

第一活动

mmAdapter.setOnItemClickListener(new HATwo.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);                             
intent.putExtra(MyActivity.EXTRA_PARAM_HOTEL_ID, mPhotosList.get(position).getId());                      
intent.putExtra(MyActivity.EXTRA_PARAM_HOTEL_NAME, mPhotosList.get(position).getTitle());                                    
intent.putExtra(HotelActivity.EXTRA_PARAM_FOR_RESULT, true);
//startActivityForResult(intent, MY_REQUEST_CODE_TWO);
startActivity(intent);

第二活动

public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("name",nameOfTheHotel );
intent.putExtra("id", hotelId);
setResult(Activity.RESULT_OK, intent);
finish();
}

您可能希望使用 startActivity 从片段到第一个活动,然后从第一个活动到第二个活动使用 startActivityForResult。 当你从第二活动获得结果时,你在第一活动的onActivityResultResult上处理它,并使用意图从第一个活动转到片段,并将从第二个活动获得的值传递到第一个活动的片段。 确保正确处理后退堆栈。

首先取消注释

startActivityForResult(intent, MY_REQUEST_CODE_TWO);

onItemClickFirstActivity和评论的方法

//startActivity(intent);

FirstActivity中添加此onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MY_REQUEST_CODE_TWO) {
Intent intent = new Intent();
intent.putExtra("name", data.getExtras().getString("name"));
intent.putExtra("id", data.getExtras().getString("id"));
setResult(Activity.RESULT_OK, intent);
finish();
}
}

解释:

SecondActivity的结果将交付给FirstActivityFirstActivity的结果将交付给FragmentActivity

通过调用将活动结果值从活动传递到片段 ->

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
for (Fragment fragment : getSupportFragmentManager().getFragments()) {
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
}

然后调用活动导致片段

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("onF**kingHere*frg", String.valueOf(requestCode) + " " + resultCode);
}

最新更新