我希望从另一个活动(RemoveStatement)访问活动方法(Budgeting.readFromDb())。 RemoveStatement通过BudgetingFragment(Budgeting中的占位符片段)的意图运行。
但是,当我尝试获取BudgetingFragment的实例(通过getFragmentManager()。findFragmentByTag(“budgetingFragment”))来调用getActivity()时,它返回一个null对象。我似乎无法弄清楚它为什么这样做以及如何解决它。
我尝试了以下事项:
任何帮助解决这个问题都将受到赞赏。
预算内改变片段的方法
public void onClickFragment(int id, String arrowDirection){
//Get current Fragment
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.budgetingFragment);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (currentFragment instanceof BudgetingOverviewFragment && arrowDirection == "Left"){
IncomeFragment incomeFragment = new IncomeFragment();
transaction.replace(R.id.budgetingFragment, incomeFragment, "budgetingFragment");
}
else if (currentFragment instanceof BudgetingOverviewFragment && arrowDirection == "Right"){
ExpenseFragment expenseFragment = new ExpenseFragment();
transaction.replace(R.id.budgetingFragment, expenseFragment, "budgetingFragment");
}
else if (currentFragment instanceof IncomeFragment && arrowDirection == "Right"){
BudgetingOverviewFragment overviewFragment = new BudgetingOverviewFragment();
transaction.replace(R.id.budgetingFragment, overviewFragment, "budgetingFragment");
}
else{
BudgetingOverviewFragment overviewFragment = new BudgetingOverviewFragment();
transaction.replace(R.id.budgetingFragment, overviewFragment, "budgetingFragment");
}
transaction.addToBackStack("budgetingFragment");
transaction.commit();
getSupportFragmentManager().executePendingTransactions();
}
RemoveStatements onCreate()方法中的代码:
FragmentManager fm = getFragmentManager();
//This Fragment is a null pointer
Fragment callingFragment = fm.findFragmentByTag("budgetingFragment");
//This crashes the application as getActivity() is called on a null reference
Budgeting budgeting = (Budgeting) callingFragment.getActivity();
答案 0 :(得分:0)
每个活动都有自己的FragmentManager。因此,您的第二项活动找不到任何"budgetingFragment"
。
答案 1 :(得分:0)
据我所知,您打算将 activity1 的所选片段检索到 activity2 中,对吗?
嗯,通过查看 activity2 的片段管理器,您无法获得它,因为它位于 activity1 的不同上下文中
推荐的方法是聚集所选片段中所需的所有数据,并在意图的定义(link1或<}期间将其传递给 activity2 link2)。
创建 activity2 时,您可以获取先前已序列化的数据,从而在 activity2 上使用它。此外,您可以使用替换事务在 activity2 上为新片段充气,如 activity1 (link)。请注意,要执行此操作,您需要在{em> activity2 的布局中提供R.id.budgetingFragment
FrameLayout ID。