2017-06-21 98 views
0

新問題的方法abaut這樣:Android Studio Refresh ErrorAndroid Studio中調用片段從其他片段或活動

我想從另一個片段的片段叫Method。我已經試過這個:

(Tab3Storage) (getSupportFragmentManager().findFragmentById(R.id.tab3storage)).Storagerefresh(); 

但我有一個NullPointerException錯誤。我怎樣才能使這個或調用窗體成爲片段的活動,因爲從片段到活動的調用已經很好。

代碼:

主要活動:

public void refreshAll(){ 

    Tab3Storage tab3Storage = new Tab3Storage(); 
    tab3Storage.Storagerefresh(); 

    Tab4Gravel tab4Gravel = new Tab4Gravel(); 
    tab4Gravel.Gravelrefresh(); 
} 

這是片段代碼:

totalMoney = loadData("totalMoney"); 
    totalMoneyDisplay.setText("$ " + totalMoney); 

    totalGravel = loadData("totalGravel"); 
    totalGravelDisplay.setText(totalGravel + " Gravel"); 

    Storage_Level = loadData("storageLevel"); 
    if (Storage_Level == 0){ 
     Storage_Level = 1; 
    } 
    if(Storage_Level == 1){ 
     Storage_Capacity = Storage_Level1; 
    } 
    if(Storage_Level == 2){ 
     Storage_Capacity = Storage_Level2; 
    } 
    if(Storage_Level == 3){ 
     Storage_Capacity = Storage_Level3; 
    } 
    if(Storage_Level == 4){ 
     Storage_Capacity = Storage_Level4; 
    } 
    saveData("storageLevel", Storage_Level); 

    Storage_Filled = totalGravel; 
    storageCapacityDisplay.setText(Storage_Filled + "/" + Storage_Capacity); 
    SellGravelButton.setText("Sell: $" + totalGravel); 

    storageUpgradebtn.setText("Level " + Storage_Level + ":\n$" + Storage_Capacity/2); 

負載數據代碼:

private long loadData(String name){ 

    SharedPreferences shared = this.getActivity().getPreferences(Context.MODE_PRIVATE); 
    long value = shared.getLong(name, 0); 
    return value; 
} 

回答

0

什麼你告訴機器人與此getSupportFragmentManager().findFragmentById(R.id.tab3storage))是獲得片段的視圖,它

不實際的代碼要做到這一點簡單地創建片段和調用函數:

myFragment fragment = new myFragment(); 
fragment.Storagerefresh(); 
+0

這工作得更好,但給我的這個錯誤:「顯示java.lang.NullPointerException:嘗試在調用虛擬方法android.content.SharedPreferences android.support.v4.app.FragmentActivity.getPreferences(INT)'空對象引用「 –

+0

這與此問題有所不同。這與你的'SharedPreferences'有關。包括髮生在哪裏的代碼 – Code

+0

我把代碼放在問題 –

-1

的正確解決方案的Android文檔中描述。 Communicating with Other Fragments
根據文檔,您可以在Fragment類中定義一個接口並在Activity中實現它,然後根據您希望的事件調用接口,以便接收方捕獲該事件。

0
/**Use following Spinet of Code**/ 

Note: Below "activity_framelayout" is your Activity FrameLayout on which all your related Fragment is Attached. And Here i used "FrameLayout" 
you can use any Layout either "RelativeLayout" or "LinearLayout" depends on your choice. 

<FrameLayout 
     android:id="@+id/activity_framelayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

FrameLayout activity_framelayout = (FrameLayout) findViewById(R.id.activity_framelayout); 

Fragment fragment = new Target_Fragment(); 
FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

if(activity_framelayout.getChildCount() > 0 && activity_framelayout.getChildAt(0) != null) 
{ 
    activity_framelayout.removeAllViews(); 
} 
fragmentTransaction.add(R.id.activity_framelayout, fragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit();