javascript - Android 事件总线将数据从 Activity 传递到选项卡 fragment

标签 javascript android jquery android-fragments

我的程序中有 5 个选项卡 fragment ,我想将数据从工具栏按钮传递到 5 个选项卡 fragment ,但问题是当我单击工具栏按钮时,它只传递到 3 个 fragment ,任何人都知道解决这个问题

主要 Activity

这是我在 MainActivity 中的 onclick 函数

    public void editpage( View view) {

    ToggleButton etMessage = (ToggleButton) findViewById(R.id.toggleButton);
    Events.ActivityFragmentMessage activityFragmentMessageEvent = new Events.ActivityFragmentMessage(String.valueOf(etMessage.getText()));
    Events.ActivityFragmentMessage2 activityFragmentMessageEvent2 = new Events.ActivityFragmentMessage2(String.valueOf(etMessage.getText()));
    Events.ActivityFragmentMessage3 activityFragmentMessageEvent3 = new Events.ActivityFragmentMessage3(String.valueOf(etMessage.getText()));
    Events.ActivityFragmentMessage4 activityFragmentMessageEvent4 = new Events.ActivityFragmentMessage4(String.valueOf(etMessage.getText()));
    Events.ActivityFragmentMessage5 activityFragmentMessageEvent5 = new Events.ActivityFragmentMessage5(String.valueOf(etMessage.getText()));
    GlobalBus.getBus().post(activityFragmentMessageEvent);
    GlobalBus.getBus().post(activityFragmentMessageEvent2);
    GlobalBus.getBus().post(activityFragmentMessageEvent3);
    GlobalBus.getBus().post(activityFragmentMessageEvent4);
    GlobalBus.getBus().post(activityFragmentMessageEvent5);

}

list_fragment2

这就是单击 MainActivity 上的切换按钮后我接收数据的方式

@Override
public void onStart() {
    super.onStart();
    GlobalBus.getBus().register(this);
}
@Subscribe
public void getMessage(Events.ActivityFragmentMessage activityFragmentMessage) {

    messageView2 = (TextView) getView().findViewById(R.id.sum2);
    messageView2.setText(String.valueOf(activityFragmentMessage.getMessage()));
    messageView2.setText(activityFragmentMessage.getMessage());
    i = messageView2.getText().toString();
    result = Integer.parseInt(i);
    if (result == 1) {
        Nsum[0]++;
        editor.putInt(PREFS_KEY,Nsum[0]);
        editor.commit();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(list_fragment2.this).attach(list_fragment2.this).commit();

    }else if (result ==0){
        editor.remove(PREFS_KEY);
        editor.commit();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(list_fragment2.this).attach(list_fragment2.this).commit();
    }

}
@Override
public void onDestroyView() {
    super.onDestroyView();
    GlobalBus.getBus().unregister(this);
}

orderlist_fragment

 @Override
public void onStart() {
    super.onStart();
    GlobalBus.getBus().register(this);
}
@Subscribe
public void getMessage3(Events.ActivityFragmentMessage3 activityFragmentMessage3) {

    messageView3 = (TextView) getView().findViewById(R.id.sum3);
    messageView3.setText(String.valueOf(activityFragmentMessage3.getMessage3()));
    messageView3.setText(activityFragmentMessage3.getMessage3());
    i = messageView3.getText().toString();
    result = Integer.parseInt(i);
    if (result == 1) {
        Nsum[0]++;
        editor.putInt(PREFS_KEY,Nsum[0]);
        editor.commit();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(orderlist_fragment.this).attach(orderlist_fragment.this).commit();

    }else if (result ==0){
        editor.remove(PREFS_KEY);
        editor.commit();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(orderlist_fragment.this).attach(orderlist_fragment.this).commit();
    }

}
@Override
public void onDestroyView() {
    super.onDestroyView();
    GlobalBus.getBus().unregister(this);
}

Tab4_fragment

 @Override
public void onStart() {
    super.onStart();
    GlobalBus.getBus().register(this);
}
@Subscribe
public void getMessage(Events.ActivityFragmentMessage4 activityFragmentMessage4) {

    messageView4 = (TextView) getView().findViewById(R.id.sum4);
    messageView4.setText(String.valueOf(activityFragmentMessage4.getMessage4()));
    messageView4.setText(activityFragmentMessage4.getMessage4());
    i = messageView4.getText().toString();

    result = Integer.parseInt(i);
    if (result == 1) {
        Nsum[0]++;
        editor.putInt(PREFS_KEY,Nsum[0]);
        editor.commit();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(Tab4_fragment.this).attach(Tab4_fragment.this).commit();

    }else if (result ==0){
        editor.remove(PREFS_KEY);
        editor.commit();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(Tab4_fragment.this).attach(Tab4_fragment.this).commit();
    }

}
@Override
public void onDestroyView() {
    super.onDestroyView();
    GlobalBus.getBus().unregister(this);
}

最佳答案

这是因为 fragment 4和5还没有创建。将 setOffscreenPageLimit(5) 添加到 viewPager 实例中。它将把所有 5 个 fragment 保留到内存中,而不是使用延迟加载机制。

官方文档链接setOffscreenPageLimit

Set the number of pages that should be retained to either side of the current page in the view hierarchy in an idle state. Pages beyond this limit will be recreated from the adapter when needed.

关于javascript - Android 事件总线将数据从 Activity 传递到选项卡 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151055/

相关文章:

javascript - 将 HTML 表结构复制到剪贴板

android - 错误 : cannot find symbol method findViewById(int)

jquery - Internet Explorer 9.0 中的背景动画不显示动画

javascript - Angular Jasmine SpyOn $resource 处理错误

javascript - jQuery 从逗号分隔列表中选择 ID

android - 深度链接 - 通过另一个 Ionic 应用程序打开一个 Ionic 应用程序

android - 在 onSaveInstanceState() 上的 Bundle 中存储的数据大小是否合理?

android - jQuery Mobile 未运行辅助 javascript

javascript - ie8更新值事件

javascript - 打破带有 lint 问题的下划线循环