2017-02-10 35 views
1

我在我的程序中有5个选项卡片段,我想从我的工具栏按钮传递数据到5选项卡片段,但问题是当我单击我的工具栏按钮时它只传递3片段,人有想法来解决这个安卓事件总线传递数据从活动到选项卡片段

主要活动

这是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); 
} 
+0

如果你正在使用'TabLayout',它首先会膨胀一些碎片,在这种情况下,我猜想是3。您的其他片段尚未初始化。因此,您在创建数据时必须检查数据。 –

+0

@NaveenDissanayake谢谢,你是否意味着问题出现在我的tablayout中? – AnthonyTang

+0

我的意思是你认为它的工作方式。当你使用'TabLayout'时,它不会膨胀所有的片段。这实际上是预期的方式。 –

回答

0

这是因为片段4和5尚未创建。将setOffscreenPageLimit(5)添加到viewPager实例中。它会将所有5个片段保存到内存中,而不是使用延迟加载机制。

官方的文档链接setOffscreenPageLimit

一套应保留在视图层次结构的 当前页面的两侧处于空闲状态的页数。超出此限制的页面将在需要时从适配器重新创建。

+0

再次感谢,我仍然是新的Android,谢谢你回答我的问题:) – AnthonyTang