旋转后,目标片段的结果似乎为null

时间:2017-07-02 11:14:47

标签: java android android-fragments rotation

我正在开发一款游戏。我有一个游戏片段和一个规则片段。首先,游戏活动开始没有规则的游戏片段:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragment_container);

    if (fragment == null) {
        fragment = new GameFragment();
        fm.beginTransaction().add(R.id.fragment_container, fragment).commit();
    }

在游戏片段中,我可以启动规则片段:

            RuleFragment ruleFragment = new RuleFragment();

            ruleFragment.setTargetFragment(GameFragment.this, RULE_FRAGMENT);

            FragmentManager fm = getActivity().getSupportFragmentManager();

            //Sets the list of previously played rounds as an argument for the new fragment
            Bundle b = new Bundle();
            b.putParcelableArrayList(ROUNDS_PLAYED, mRounds);
            ruleFragment.setArguments(b);

            fm.beginTransaction().replace(R.id.fragment_container, ruleFragment).addToBackStack(null).commit();

我可以回到这样的游戏片段:

if(ruleIsSelected && mRound != null) {
            Intent intent = new Intent();
            intent.putExtra(CHOSEN_RULE, mRound);
            getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
            getFragmentManager().popBackStack();
        }

我的问题是,我可以在横向模式和纵向模式下从游戏片段开始规则片段,并通过意图返回没有问题的结果。但当我在规则片段中然后旋转屏幕时,似乎没有任何效果。我按下以返回游戏的按钮仍然有效,但似乎没有选择新的Rule对象。在我的游戏片段中,我有:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RULE_FRAGMENT && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            Round chosenRule = data.getParcelableExtra(RuleFragment.CHOSEN_RULE);
            if (chosenRule != null) {
                mActiveRound = chosenRule;
                setThrowsLeftTextView(mActiveRound.getThrowsLeft());
                mRounds.add(mActiveRound);
            }
        }
    }
}

当我不旋转时,一切都像魅力一样。但是当我在规则片段中旋转时,setThrowsLeftTextView(...)方法给了我一个空指针。请记住,当我不旋转时,该方法可以正常工作。

短暂的;如果片段A开始片段B,然后我旋转屏幕,我如何将数据(一个对象)从B发送到A并在A中设置一个TextView,表示我从B发送的属性(例如数字)?

0 个答案:

没有答案