Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-从Backback返回时为空白片段_Android_Android Fragments_Onbackpressed_Fragment Backstack - Fatal编程技术网

Android-从Backback返回时为空白片段

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);

我有一个显示属性列表的视图,在屏幕底部有一个按钮,打开一个包含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;
    }
}
我的属性片段的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()
for
add()
,但是这种方法永远不会调用
onResume()
,我需要在用户返回属性片段时更新UI。没错。在这种情况下,不会调用onResume,因为它只在堆栈上。但是,如果确实需要调用onResume(),则可以使用一个活动权限托管2个片段,并以这种方式控制onResume状态。这样,您也不会丢失数据。
if(getSupportFragmentManager().getBackStackEntryCount() !=1){
                fragmentTransaction.addToBackStack(null);
            }