我有一个在两个片段之间切换的活动:一个显示地图,另一个显示一个列表。
当活动首次开始时,地图片段将添加到FrameLayout,如下所示:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, mapFragment)
.commit();
在这种情况下,第二个列表片段尚未膨胀。每当用户浏览地图时,我希望列表片段根据用户在地图上的平移位置进行更新。
基本上,我想做一些像
这样的事情listFragment.updateList(...);
但是,由于列表片段的视图尚未膨胀,我还无法更新其视图。有没有办法我可以做到这一点,而不必等到我将列表片段添加到FrameLayout?
基本上我的最终目标是在片段之间进行流畅的过渡;当用户切换到列表视图时,我希望视图尽快更新(如果我可以在将视图添加到活动之前更新视图,就会发生这种情况)。
答案 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();