我需要将数据从activity
传递到fragment
。
我确实尝试设置setArguments()
,broadcast receiver
而且我不知道我在哪里犯错
提示1:MainActivity
setArguments()
bundle
中塞满了东西,但是当我打电话给getArguments()
时却是空的,为什么?
MainActivity
:
@Override
protected void onSaveInstanceState(Bundle outState) {
Bundle gameData = getIntent().getExtras();
float current_zoom =(gameData.getFloat("current_zoom"));
LatLng current_target =((LatLng)gameData.getParcelable("current_target"));
float current_bearing =(gameData.getFloat("current_bearing"));
String current_map_mode = (gameData.getString("current_map_mode"));
Bundle dataActivityBundle = new Bundle();
dataActivityBundle.putFloat("current_zoom",current_zoom);
dataActivityBundle.putParcelable("current_target",current_target);
dataActivityBundle.putFloat("current_bearing",current_bearing);
dataActivityBundle.putString("current_map_mode",current_map_mode);
MapFragment myObj = new MapFragment();
myObj.setArguments(dataActivityBundle);
Log.i("Rotate","Arguments : "+String.valueOf(mapFragment.getArguments()));
super.onSaveInstanceState(outState);
}
MapFragment
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_map, container, false);
mapFragment = (SupportMapFragment)getChildFragmentManager().findFragmentById(R.id.map);
if(mapFragment==null){
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
mapFragment = SupportMapFragment.newInstance();
ft.replace(R.id.map,mapFragment).commit();
}
mapFragment.getMapAsync(this);
if (getArguments() != null) {
current_zoom = getArguments().getFloat("current_zoom");
current_target = getArguments().getParcelable("current_target");
current_bearing = getArguments().getFloat("current_bearing");
current_map_mode = getArguments().getString("current_map_mode");
Log.i("Rotate","onCreateView : getArguments() != null");
Log.i("Rotate","current_zoom "+getArguments().getFloat("current_zoom"));
Log.i("Rotate","current_target "+getArguments().getParcelable("current_target"));
Log.i("Rotate","current_bearing "+getArguments().getFloat("current_bearing"));
Log.i("Rotate","current_map_mode "+getArguments().getString("current_map_mode"));
}
}
答案 0 :(得分:0)
您可能做错了什么,就是在片段本身中执行片段事务。传统上,交易应在父活动中进行。尝试通过将事务逻辑从MapFragment
移到MainActivity
来重构代码,如下所示:
// MainActivity.java
@Override
protected void onSaveInstanceState(Bundle outState) {
Bundle gameData = getIntent().getExtras();
float current_zoom =(gameData.getFloat("current_zoom"));
LatLng current_target =((LatLng)gameData.getParcelable("current_target"));
float current_bearing =(gameData.getFloat("current_bearing"));
String current_map_mode = (gameData.getString("current_map_mode"));
Bundle dataActivityBundle = new Bundle();
dataActivityBundle.putFloat("current_zoom",current_zoom);
dataActivityBundle.putParcelable("current_target",current_target);
dataActivityBundle.putFloat("current_bearing",current_bearing);
dataActivityBundle.putString("current_map_mode",current_map_mode);
// Fragment transaction code moved here
MapFragment myObj = new MapFragment();
myObj.setArguments(dataActivityBundle);
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
mapFragment = SupportMapFragment.newInstance();
ft.replace(R.id.map,mapFragment).commit();
Log.i("Rotate","Arguments : "+String.valueOf(mapFragment.getArguments()));
super.onSaveInstanceState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_map, container, false);
// Fragment transaction logic no longer here
// Call private functions without initializing the object's own class
getMapAsync(this);
if (getArguments() != null) {
current_zoom = getArguments().getFloat("current_zoom");
current_target = getArguments().getParcelable("current_target");
current_bearing = getArguments().getFloat("current_bearing");
current_map_mode = getArguments().getString("current_map_mode");
Log.i("Rotate","onCreateView : getArguments() != null");
Log.i("Rotate","current_zoom "+getArguments().getFloat("current_zoom"));
Log.i("Rotate","current_target "+getArguments().getParcelable("current_target"));
Log.i("Rotate","current_bearing "+getArguments().getFloat("current_bearing"));
Log.i("Rotate","current_map_mode "+getArguments().getString("current_map_mode"));
}
}