【问题标题】:Fragment created multiple times within RadioGroup在 RadioGroup 中多次创建片段
【发布时间】:2015-12-02 08:25:14
【问题描述】:

我有一个带有两个 RadioButtons 的 RadioGroup 的活动。 RadioButtons 的行为类似于选项卡,应该创建两个不同的片段,具体取决于单击了哪个按钮。问题是片段的 onCreateView 方法被调用了两次,我不知道为什么。

这是我的活动:

public class MyActivity {

private RadioGroup radioGroup;
private FrameLayout frame;
private RadioButton radio1;
private RadioButton radio2;

private RadioOneFragment radio1Fragment;
private RadioTwoFragment radio2Fragment;

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

    radio1 = (RadioButton) findViewById(R.id.radio1);
    radio2 = (RadioButton) findViewById(R.id.radio2);

    radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
                case R.id.radio1:
                    radio1Fragment = new RadioOneFragment();
                    getFragmentManager().beginTransaction()
                            .replace(R.id.radio_frg_container, radio1Fragment)
                            .commit();
                    break;
                case R.id.radio2:
                    radio2Fragment = new RadioTwoFragment();
                    getFragmentManager().beginTransaction()
                            .replace(R.id.radio_frg_container, radio2Fragment)
                            .commit();
                    break;
            }
        }
    });
    if (getIntent().getExtras() != null) {
        radioGroup.check(R.id.radio2);
    } else {
        radioGroup.check(R.id.radio1);
    }
}
}

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 这种行为是因为我正在检查我的代码中的单选按钮引起的吗?

标签: android android-fragments radio-button


【解决方案1】:

我在这里找到了答案:RadioGroup calls onCheckChanged() three times

您应该简单地使用radio1.setChecked(true),而不是使用radioGroup.check(R.id.radio1)

【讨论】:

    【解决方案2】:

    尝试一个 Fragment 对象

    private RadioOneFragment radio1Fragment;
    private RadioTwoFragment radio2Fragment;
    

    实例

    private RadioTwoFragment radioFragment;
    

    switch (checkedId) {
                    case R.id.radio1:
                        radioFragment = new RadioOneFragment();
                        getFragmentManager().beginTransaction()
                                .replace(R.id.radio_frg_container, radioFragment)
                                .commit();
                        break;
                    case R.id.radio2:
                        radioFragment = new RadioTwoFragment();
                        getFragmentManager().beginTransaction()
                                .replace(R.id.radio_frg_container, radioFragment)
                                .commit();
                        break;
                }
    

    【讨论】:

    • 谢谢,但不幸的是这并没有解决问题
    猜你喜欢
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多