2

我有一个显示属性列表的视图,在屏幕底部有一个按钮,可以打开一个包含 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无处可见。

我究竟做错了什么?

4

2 回答 2

2

如果您尝试从片段启动该 Web 视图,请尝试使用 add fragment 而不是replace

例如 :

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 相同。

也许我误解了这个问题,所以请在这种情况下纠正我。

希望这可以帮助。

于 2015-05-19T22:01:11.777 回答
1

addToBackStack() <--不要在你的第一个片段中包含这个。-->

if(getSupportFragmentManager().getBackStackEntryCount() !=1){
                fragmentTransaction.addToBackStack(null);
            }
于 2017-11-20T12:12:52.993 回答