来自其他片段或活动的Android Studio调用片段方法

时间:2017-06-21 17:30:33

标签: android android-fragments methods android-tablayout

新问题: Android Studio Refresh Error

我想从另一个片段中调用片段中的Method。我已经尝试过了:

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

但我有NullPointerException错误。我如何将这个或调用形式作为Fragment的一个活动,因为从Fragment到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;
}

3 个答案:

答案 0 :(得分:1)

你用这个getSupportFragmentManager().findFragmentById(R.id.tab3storage))告诉android的是获取片段的视图,而不是它的代码

为此,只需创建片段并调用函数:

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

答案 1 :(得分: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();

答案 2 :(得分:-1)

Android文档中描述了正确的解决方案。 Communicating with Other Fragments
根据文档,您可以在Fragment类中定义一个接口并在Activity中实现它,然后根据您需要的事件调用接口,以便接收方将捕获该事件。