Android-从Backback返回时为空白片段
我有一个显示属性列表的视图,在屏幕底部有一个按钮,打开一个包含MapView的片段Android-从Backback返回时为空白片段,android,android-fragments,onbackpressed,fragment-backstack,Android,Android Fragments,Onbackpressed,Fragment Backstack,我有一个显示属性列表的视图,在屏幕底部有一个按钮,打开一个包含MapView的片段 @Override public void onClick(View v) { switch (v.getId()) { case R.id.find_property_btn_map: PropertyMapFragment fragment = PropertyMapFragment.newInstance(false, null);
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.find_property_btn_map:
PropertyMapFragment fragment = PropertyMapFragment.newInstance(false, null);
getActivity().getSupportFragmentManager().beginTransaction()
.addToBackStack(null)
.replace(((ViewGroup) getView().getParent()).getId(), fragment, PropertyMapFragment.class.getSimpleName())
.commit();
break;
}
}
我的属性片段的onCreateView方法如下
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mRootView = inflater.inflate(R.layout.fragment_properties_list, container, false);
getmBtnMap().setOnClickListener(this);
getmBtnSaveSearch().setOnClickListener(this);
getmBtnSort().setOnClickListener(this);
getmListView().setAdapter(getPropertyAdapter());
getmListView().setOnItemClickListener(this);
getmListView().setOnScrollListener(this);
getmListView().setScrollingCacheEnabled(false);
searchProperties();
return mRootView;
}
searchProperties()
负责调用Web服务并填充ArrayAdapter
问题是,当我打开MapFragment
并按下后退按钮时,我的属性片段
为空,按钮不会响应onClick
事件
我尝试过调试,看到返回到属性片段时调用了onCreateView()
,但是按钮不再工作,并且看不到列表视图
我做错了什么?如果您试图从片段启动该web视图,请尝试使用“添加片段”而不是“替换”
例如:
getActivity().getSupportFragmentManager().beginTransaction()
.addToBackStack(null)
.replace(YOUR_CONTAINER_ID, fragment, PropertyMapFragment.class.getSimpleName())
.commit();
上面的代码是用新的容器替换那个片段容器,而不是在上面添加那个片段。因此,当您使用该ID执行替换片段时,它只是将该视图替换为新视图
现在,
相同的代码,但带有add:
getActivity().getSupportFragmentManager().beginTransaction()
.addToBackStack(null)
.add(YOUR_CONTAINER_ID, fragment, PropertyMapFragment.class.getSimpleName())
.commit();
现在,您所拥有的web视图片段将被添加到视图/片段中,现在当您从该web视图按back时,您前面的片段将可见
只需确保要替换的ID与具有所有其他属性的ID相同即可
也许我误解了这个问题,所以请在这方面纠正我
希望这有帮助。addToBackStack()
在显示PropertyMapFragment
时,使用((视图组)getView().getParent()).getId()
有什么特别的原因吗?如果没有,我建议将其替换为R.id.container
:.replace(R.id.container,fragment,PropertyMapFragment.class.getSimpleName())
是的,我这样使用它是因为我在属性片段中调用它,而不是在包含活动中调用它感谢您的回答@mike2013,我尝试了更改replace()foradd()
,但是这种方法永远不会调用onResume()
,我需要在用户返回属性片段时更新UI。没错。在这种情况下,不会调用onResume,因为它只在堆栈上。但是,如果确实需要调用onResume(),则可以使用一个活动权限托管2个片段,并以这种方式控制onResume状态。这样,您也不会丢失数据。
if(getSupportFragmentManager().getBackStackEntryCount() !=1){
fragmentTransaction.addToBackStack(null);
}