我正在开发一款游戏。我有一个游戏片段和一个规则片段。首先,游戏活动开始没有规则的游戏片段:
@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发送的属性(例如数字)?