2017-06-21 100 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();