Ich möchte auf eine Aktivitätsmethode (Budgeting.readFromDb()) von einer anderen Aktivität (RemoveStatement) zugreifen. RemoveStatement wird mit einer Absicht von BudgetingFragment (einem Platzhalterfragment in der Budgetierung) ausgeführt.Android: Instanz einer Fragmentaktivität von einer anderen Aktivität abrufen
Wenn ich jedoch versuche, eine Instanz von BudgetingFragment (über getFragmentManager() .findFragmentByTag ("budgetingFragment")) abzurufen, um getActivity() aufzurufen, wird ein Nullobjekt zurückgegeben. Ich kann nicht herausfinden, warum es das macht und wie man es repariert.
Ich habe folgende Dinge ausprobiert.
- hinzufügen Tag zu Backstack
- Anruf getSupportFragmentManager() executePendingTransactions() nach dem Fragment innerhalb budgetingFragment ersetzen.
Jede Hilfe, um dies zu beheben, würde geschätzt werden.
Methode innerhalb Budgetierung zu ändern Fragment
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();
}
Code innerhalb RemoveStatements onCreate() Methode:
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();
Also, was wäre der beste Ansatz, um die Instanz des Fragments oder sogar die Instanz der Budgetierungsaktivität zu erhalten? Wäre es ratsam, die Instanz des Fragmentmanagers für Budgetierungsaktivitäten an RemoveStatement zu übergeben – JoeScott1232
Fragmente sollten sich nicht bewusst sein (lose Kopplung). Setze Argumente zu Fragmenten in der Host-Aktivität und verwende [Rückrufe] (http://developer.android.com/training/basics/fragments/communicating.html) –