2017-02-10 34 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