【发布时间】:2017-05-30 05:52:36
【问题描述】:
场景:您有两个片段,片段 A 填充 ListAdapter,片段 B 包含带有 ListAdapter 的 SearchView。
问题:Fragment A 如何更新 Fragment B 的 SearchView 的 ListAdapter?
【问题讨论】:
标签: java android fragment searchview listadapter
场景:您有两个片段,片段 A 填充 ListAdapter,片段 B 包含带有 ListAdapter 的 SearchView。
问题:Fragment A 如何更新 Fragment B 的 SearchView 的 ListAdapter?
【问题讨论】:
标签: java android fragment searchview listadapter
片段不应直接通信。您应该使用您的活动在子片段之间进行通信。您可以创建一个接口,该接口将定义片段之间的通信合同。
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 而只需要通信合约。
【讨论】:
您可以通过ID 访问您的Fragment:
Fragment_1 fragment = (Fragment_1) getSupportFragmentManager().findFragmentById(R.layout.fr1);
fragment.updateSearchView();
【讨论】: