在将片段添加到活动

时间:2016-04-12 03:48:43

标签: java android android-fragments

我有一个在两个片段之间切换的活动:一个显示地图,另一个显示一个列表。

当活动首次开始时,地图片段将添加到FrameLayout,如下所示:

getSupportFragmentManager()
        .beginTransaction()
        .replace(R.id.content_frame, mapFragment)
        .commit();

在这种情况下,第二个列表片段尚未膨胀。每当用户浏览地图时,我希望列表片段根据用户在地图上的平移位置进行更新。

基本上,我想做一些像

这样的事情
listFragment.updateList(...);

但是,由于列表片段的视图尚未膨胀,我还无法更新其视图。有没有办法我可以做到这一点,而不必等到我将列表片段添加到FrameLayout?

基本上我的最终目标是在片段之间进行流畅的过渡;当用户切换到列表视图时,我希望视图尽快更新(如果我可以在将视图添加到活动之前更新视图,就会发生这种情况)。

2 个答案:

答案 0 :(得分:1)

我认为您可以将更新后的list存储在您的framgent中:

public class yourFragment extends Fragment{
      private ArrayList<Object> yourList;
}

当您更新列表时,您可以检查if(getView() != null) - &gt;更新您的ListView或设置yourList = yourUpdateList。然后,在您的片段onCreateView中,检查yourList是否为空,如果不为空,只需将数据设置为ListView

答案 1 :(得分:0)

在您的列表片段中有一个指向Presenter的链接,该链接将为您的片段提供数据。

public interface ListPresenter {
     public List<Object> getObjects();
}

将此演示者附加到片段

private ListPresenter presenter;
@Override
public void onAttach(Activity activity) {
     presenter = (ListPresenter)activity;
}

然后,只要您想获取数据,就可以调用presenter方法,它始终可以从活动中获得。

还要添加地图交互器以更新对象。

public interface MapInteractor {
    void setObjects(List<Object> objects);
}

活动:

public class MyActivity extends Activity implements ListPresenter,
                                                    MapInteractor {
...
@Override
public List<Object> getObjects() {
    return currentObjects;
}

@Override
public void setObjects(List<Object> objects) {
     currentObjects = objects;
}

要快速实例化您的片段,您可以在开始时将其添加到隐藏状态并稍后显示。

getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.content_frame, listFragment)
    .hide(listFragment)
    .commit();