首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RadioGroup onCheckedChanged返回ArrayIndexOutOfBoundException

RadioGroup onCheckedChanged返回ArrayIndexOutOfBoundException
EN

Stack Overflow用户
提问于 2014-07-22 04:36:40
回答 1查看 133关注 0票数 0

下面是RadioGroup xml文件:

代码语言:javascript
复制
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radio_group"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">

</RadioGroup>

然后我编写了按钮:

代码语言:javascript
复制
public class AbilityDialog extends DialogFragment {
    public static final String ATAG = "ABILITY_DIALOG";

    private String[] mAbilityList;

    public AbilityDialog() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        return inflater.inflate(R.layout.dialog_ability, container);
    }

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        RadioGroup radioGroup = (RadioGroup) getView().findViewById(R.id.radio_group);
        radioGroup.removeAllViews();
        mAbilityList = getArguments().getStringArray("AbilityList");
        int selectedAbility = getArguments().getInt("SelectedAbility");
        for (int i=0; i < mAbilityList.length; i++) {
            RadioButton radioButton = new RadioButton(getActivity());
            radioButton.setText(mAbilityList[i]);
            radioButton.setPadding(0, 0, 48, 0);
            radioGroup.addView(radioButton);
        }
        radioGroup.check(selectedAbility);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                FragmentManager fm = getActivity().getSupportFragmentManager();
                MyFragment myFragment = (MyFragment) fm.findFragmentByTag(MyFragment.TAG);
                myFragment.setAbility(checkedId-1);
                getDialog().dismiss();
            }
        });
    }
}

下面是主要的片段:

代码语言:javascript
复制
public class MyFragment extends DialogFragment {
public final static String TAG = "MAIN_FRAGMENT";
private int mAbility;
private String[] mAbilityList;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_fragment, container, false);
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    TextView ability = (TextView) view.findViewById(R.id.stats_abilities);
    mAbilityList = getResources().getStringArray(R.array.p184Ability);
    String abilities = mAbilityList[0];
    for (int i=1; i < mAbilityList.length; i++) {
        abilities += " / " + mAbilityList[i];
    }
    if (getArguments() != null && getArguments().getInt("Ability") != 0) {
        setAbility(getArguments().getInt("Ability") - 1);
    } else {
        mAbility = -1;
    }

    ability.setText(abilities);
    ability.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FragmentManager fm = getActivity().getSupportFragmentManager();
            AbilityDialog abilityDialog = new AbilityDialog();
            Bundle bundle = new Bundle();
            bundle.putStringArray("AbilityList", mAbilityList);
            bundle.putInt("SelectedAbility", mAbility);
            abilityDialog.setArguments(bundle);

            abilityDialog.show(fm, AbilityDialog.ATAG);
        }
    });



public void setAbility(int ability) {
    mAbility = ability;
    if (mAbility != -1) {
        TextView pokemonAbility = (TextView) getView().findViewById(R.id.stats_abilities);
        pokemonAbility.setText(mAbilityList[ability]);
    }
}

private void closeFragment() {
    getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
}

我希望现在有足够的信息。

编辑:它似乎是不可编译的。如果问题仍然无法诊断,我会提供更多的代码。

EN

回答 1

Stack Overflow用户

发布于 2014-07-22 06:08:15

我的第一个猜测是,虽然我无法在没有更多代码的情况下检查它,但视图没有被重新创建,因此您正在向组中添加越来越多的单选按钮,而不是每次都重新启动它。

您可以使用radioGroup.removeAllViews()强制它清除所有按钮

将其添加到onViewCreated(...)的开头,看看会发生什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24874251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档