我有一个显示属性列表的视图,在屏幕底部有一个按钮,用于打开包含MapView的片段。
@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;
}
}
我的Properties片段的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
然后按后退按钮时,我的Property fragment
为空,按钮不响应onClick
个事件。
我尝试调试并看到onCreateView()
在回到Property fragment
时被调用,但按钮不再有效且listview
无处可见。
我做错了什么?
答案 0 :(得分:1)
如果您尝试从片段启动该网络视图,请尝试使用添加片段而不是替换。
例如:
getActivity().getSupportFragmentManager().beginTransaction()
.addToBackStack(null)
.replace(YOUR_CONTAINER_ID, fragment, PropertyMapFragment.class.getSimpleName())
.commit();
上面的代码是用新的代码替换该片段容器,而不是在其上添加该片段。因此,当您使用 ID 执行替换片段时,它只会将该视图替换为新视图。
现在,
相同的代码,但添加:
getActivity().getSupportFragmentManager().beginTransaction()
.addToBackStack(null)
.add(YOUR_CONTAINER_ID, fragment, PropertyMapFragment.class.getSimpleName())
.commit();
现在,您所拥有的Web视图片段将添加到视图/片段中,现在当您从该Web视图中按回时,您可以看到之前的片段。
确保您要替换的 ID 与您拥有所有其他属性的 ID 相同。
也许我误解了这个问题所以请在这种情况下纠正我。
希望这有帮助。
答案 1 :(得分:0)
addToBackStack()< - 不要将此包含在您的第一个片段中.-->
if(getSupportFragmentManager().getBackStackEntryCount() !=1){
fragmentTransaction.addToBackStack(null);
}