【问题标题】:Updating SearchView in FragA from ListAdapter in FragB?从 FragB 中的 ListAdapter 更新 FragA 中的 SearchView?
【发布时间】:2017-05-30 05:52:36
【问题描述】:

场景:您有两个片段,片段 A 填充 ListAdapter,片段 B 包含带有 ListAdapter 的 SearchView。

问题:Fragment A 如何更新 Fragment B 的 SearchView 的 ListAdapter?

【问题讨论】:

标签: java android fragment searchview listadapter


【解决方案1】:

片段不应直接通信。您应该使用您的活动在子片段之间进行通信。您可以创建一个接口,该接口将定义片段之间的通信合同。

public interface UpdateSerachViewList {
    void update(List<> data);
}

Activity 会实现这个接口。 Activity 可以访问 fragment1 和 fragment 2。

如果您想从 frag1 向 frag2 发送消息,那么 fragment1 将在 onAttach 方法中将活动(上下文参数)保存为 UpdateSerachViewList 处理程序。

public class Frag1 extends Fragment {
    private UpdateSerachViewList mCallback;
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mCallback = (UpdateSerachViewList) context; 
// If exception is throws it measn you want to use frafgment with activity which does not implement communication contract. Design error
    }

    @Override
    public void onStart() {
        super.onStart();
        mCallback.update(...);
    }
}

在 Activity 中,您可以在 Fragment2 上调用您想要的方法。或者你可以让 frag2 也实现合约,这样你就不必直接引用 Frag2 而只需要通信合约。

【讨论】:

【解决方案2】:

您可以通过ID 访问您的Fragment

Fragment_1 fragment = (Fragment_1) getSupportFragmentManager().findFragmentById(R.layout.fr1);

fragment.updateSearchView();

【讨论】:

  • 这很好地利用了我们当时可用的东西。这很简单。然而,正如 Jaroslav Klech 所指出的,它涉及的内容要多得多,并且最多需要一个用于通信的接口。我的目标是从 Fragment 1 中传递的数据更新 Fragment 2。例如,单击 Fragment 1 中的按钮,更新 Fragment 2 中的 SearchView 并弹出打开 Fragment 2 中的 ListView。
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 2020-02-07
  • 2018-09-18
  • 2021-06-10
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多