我有这样的设计:
-----------------------------------
| search input | spinner |
-----------------------------------
| item 1 |
| item 2 |
| item 3 |
-----------------------------------
fragment
(底部)包含从父活动传递下来的记录列表。当像这样创建片段时,数据通过bundle传递:
fragmentTagsList = new FragmentTagsSelector();
Bundle fragmentArgs = new Bundle();
fragmentArgs.putParcelableArrayList("tags", tags);
fragmentTagsList.setArguments(fragmentArgs);
if (getFragmentManager().findFragmentById(R.id.tagsListFragmentWrapper) == null) {
getFragmentManager().beginTransaction().add(R.id.tagsListFragmentWrapper, fragmentTagsList).commit();
}
顶部控件(搜索输入和微调器)属于父活动的UI。每当用户在搜索输入中键入查询时,我需要过滤列表并将新过滤的项目列表传递给片段。我怎样才能做到这一点?我应该从活动中调用片段的方法吗?这是一种将控制分开的好方法吗?
答案 0 :(得分:1)
您可以创建一个界面并让Activity实现它。覆盖函数将返回实时数据(根据您的设计以HashMap或数组的形式)。
^$
在片段onAttach回调中,初始化接口的对象。
@Override
public DataType getMyData()
{
....
return latestFilteredData;
}
现在,您可以使用回调对象在以下活动中的任何位置获取最新数据:
@Override
public void onAttach(Activity activity){
callback = (MyInterface) activity;
super.onAttach(activity);
}
答案 1 :(得分:0)
答案 2 :(得分:0)
这对于Android来说简直就是一个很棒的事件总线库。它会使您的代码松散耦合和清洁。
使用示例:
//posting a event from your activity
Bus bus = new Bus();
bus.post(new AnswerAvailableEvent(42));
//receiving event in your fragment
@Subscribe public void answerAvailable(AnswerAvailableEvent event) {
// TODO: React to the event somehow!
}
bus.register(this);