Android Studio 从其他片段或 activity 调用片段方法
Android Studio call fragment method from other fragment or activity
关于此的新问题:
我想从另一个片段调用一个片段中的 Method
。我已经试过了:
(Tab3Storage) (getSupportFragmentManager().findFragmentById(R.id.tab3storage)).Storagerefresh();
但是我有一个 NullPointerException
错误。我如何使这个或调用形式成为片段的 activity,因为从片段到 Activity 的调用已经正常工作了。
代码:
主要Activity:
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;
}
你告诉 android 这个 getSupportFragmentManager().findFragmentById(R.id.tab3storage))
是为了获取片段的视图,而不是它的代码
要做到这一点,只需创建片段并调用函数:
myFragment fragment = new myFragment();
fragment.Storagerefresh();
android 文档中描述了正确的解决方案。 Communicating with Other Fragments.
根据文档,您可以在 Fragment class 中定义一个接口并在 Activity 中实现它,然后根据您需要的事件调用该接口,以便接收方将捕获该事件。
/**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();
关于此的新问题:
我想从另一个片段调用一个片段中的 Method
。我已经试过了:
(Tab3Storage) (getSupportFragmentManager().findFragmentById(R.id.tab3storage)).Storagerefresh();
但是我有一个 NullPointerException
错误。我如何使这个或调用形式成为片段的 activity,因为从片段到 Activity 的调用已经正常工作了。
代码:
主要Activity:
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;
}
你告诉 android 这个 getSupportFragmentManager().findFragmentById(R.id.tab3storage))
是为了获取片段的视图,而不是它的代码
要做到这一点,只需创建片段并调用函数:
myFragment fragment = new myFragment();
fragment.Storagerefresh();
android 文档中描述了正确的解决方案。 Communicating with Other Fragments.
根据文档,您可以在 Fragment class 中定义一个接口并在 Activity 中实现它,然后根据您需要的事件调用该接口,以便接收方将捕获该事件。
/**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();