如何从父活动

时间:2015-05-28 15:57:58

标签: android android-fragments

我有这样的设计:

-----------------------------------
|   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。每当用户在搜索输入中键入查询时,我需要过滤列表并将新过滤的项目列表传递给片段。我怎样才能做到这一点?我应该从活动中调用片段的方法吗?这是一种将控制分开的好方法吗?

3 个答案:

答案 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)

使用otto from square

这对于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);