0

次のシーケンスがあります。

  • 活動を作成します。
  • その中にフラグメントを配置します。
  • 次のフラグメントに移動します。
  • 戻るボタンで前のフラグメントに戻ります。

よし、やろう。

これは、ナビゲーションで次のフラグメントに移動する方法です。

public static void addFragment(Fragment currentFragment, Fragment fragment, int frameLayout) {
    FragmentTransaction fragmentTransaction = currentFragment.getFragmentManager().beginTransaction();
    fragmentTransaction.replace(frameLayout, fragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

public static void replaceFragment(Fragment currentFragment, Fragment fragment, int frameLayout) {
    FragmentManager fragmentManager = currentFragment.getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    Fragment topFragment = fragmentManager.findFragmentById(frameLayout);
    int transactionsCount = fragmentManager.getBackStackEntryCount();
    if (transactionsCount > 0 && topFragment == currentFragment) {
        fragmentManager.popBackStack();
        fragmentTransaction.replace(frameLayout, fragment);
        fragmentTransaction.addToBackStack(null);
    }   else {
        fragmentTransaction.replace(frameLayout, fragment);
    }
    fragmentTransaction.commit();
}

onCreateView最初のフラグメントで、いくつかのデータをロードし、完了したらアクティビティ インジケーターを非表示にします

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    LinearLayout homeLayout = new LinearLayout(activity);
    inflater.inflate(R.layout.screen_home, homeLayout);

    setupCategoryButtons();
    setupHomeGenderRadioButton(mainLayout);
    setupMagazinesPreviews(mainLayout);

    return homeLayout;
}

private void setupCategoryButtons() {
    if(categoriesButtons.size() > 0) {
        View categoriesWaitIndicator = activity.findViewById(R.id.categoriesWaitIndicator);
        categoriesWaitIndicator.setVisibility(View.INVISIBLE);

        LinearLayout categoriesButtonsLayout = (LinearLayout)activity.findViewById(R.id.categoryButtonsLayout);

        for(CategoryButton categoryButton : categoriesButtons) {
            categoriesButtonsLayout.addView(categoryButton);
        }

        refreshCategoriesButtons();
    }
}

特にない。そして、それは完璧に機能します。この画面に戻るまで。

この画面に戻ると、次NullPointerExceptionの行に進みます。

categoriesWaitIndicator.setVisibility(View.INVISIBLE);
categoriesButtonsLayout.addView(categoryButton);

アプリがそれらのビューを見つけられないようです! 私はそれをやろうとしましonResumeたが、同じ効果があります。私は何を間違っていますか?

4

1 に答える 1

1

このフラグメントが何をするのか正確にはわかりませんが、でビューを操作していActivityます。ビューが構築または破棄される前にフラグメントが存在する可能性があるため、Activity制御できない要素によって破棄および/または変更されたビューを取得しようとしている可能性があります。フラグメントが分離されていて、それ自体のビューを処理する場合は、はるかに優れています。

于 2012-06-28T20:41:38.013 に答える