android-fragments 如何保存方向更改时选中的单选按钮?

dsekswqp  于 2022-11-14  发布在  Android
关注(0)|答案(3)|浏览(118)

我有一个Activity,它有一个FrameLayout来加载片段,还有一个RadioGroup,它有四个单选按钮。假设RadioButton rb1,rb2,rb3,rb4将在checkChanged上分别加载不同的片段F1,F2,F3,F4,默认情况下,它将加载F1片段。
现在,如果我选择rb2,那么它将加载片段F2,在方向再次改变后,它将加载F1。下面是我的代码,请给予如何处理它的建议。

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

        mRadioWidget = (RadioWidget) findViewById(R.id.segmented_control);
        mRadioWidget.mRGroup.setOnCheckedChangeListener(this);

        if (savedInstanceState == null) {
            HomeFragment homeFragment = new HomeFragment();
            loadFragment(false, homeFragment, HomeFragment.CLASSTAG);
        }
    }

@Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {

        switch (checkedId) {

        case R.id.rb_home:

            HomeFragment homeFragment = new HomeFragment();
            loadFragment(false, homeFragment, HomeFragment.CLASSTAG);
            break;

        case R.id.rb_config:

            ConfigFragment configFragment = new ConfigFragment();
            loadFragment(false, configFragment, ConfigFragment.CLASSTAG);
            break;

        case R.id.rb_flash:

            Toast.makeText(getApplicationContext(), "Not yet implemented", Toast.LENGTH_LONG).show();
            break;

        case R.id.rb_fav:

            FavoritesFragment favFragment = new FavoritesFragment();
            loadFragment(false, favFragment, FavoritesFragment.CLASSTAG);
            break;
        }
    }
cotxawn7

cotxawn71#

您应该尝试通过在savedInstanceState Bundle中放置某种值来记住上次加载的片段。
以下是保存和检索数据的方法:Saving Android Activity state using Save Instance State
当在onCreate中bundle不为空时,从bundle中检索该值,然后加载正确的片段并更新复选框。

qij5mzcb

qij5mzcb2#

在AndroidManifest文件中将android:configChanges="orientation|screenSize"添加到您的活动中。

c7rzv4ha

c7rzv4ha3#

如果您在.mxl文件中将id的属性设置为<RadioButton>视图,系统将为您保存状态,与<EditText>视图的情况相同。如果您仅将id设置为<RadioGroup>,则此操作无效。

例如

(坏前)

<RadioButton
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       ... />

现在

<RadioButton
       android:id="@+id/radio_example" # <----- missing property
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       ... />

相关问题