Android中未显示多个单选按钮 - 奇怪的行为

时间:2013-11-25 21:54:11

标签: android radio-button

对我来说非常奇怪的错误。 我使用TextView做了类似的事情,一切都像魅力一样,所以我认为它也适用于Radio Button

我的android中的单选按钮有问题。当我在一个按钮上设置一个值时,一切正常。但是当我旋转设备时,一些奇怪的东西开始发生。

OR未显示值,或者是全部相同的值,或者无法单击先前设置的值(并且它是不可见的)

我确实检查了保存的值,它们没问题。 有人可以向我解释我做错了什么吗? 非常感谢你。

代码:

package com.example.radiobutton;

import java.util.ArrayList;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

/**
 * 
 */

public class MainFragment extends Fragment {

private ArrayList<ItemL> mItemList;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mItemList =  HolderItemL.get(getActivity()).getList() ;

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){
    View v = inflater.inflate(R.layout.fragment_main, parent, false);
    LinearLayout topLayout = (LinearLayout) v.findViewById(R.id.top_layout);

    showPanel(topLayout, inflater, parent);

    return v;
}



private void showPanel(LinearLayout topLayout, LayoutInflater inflater, ViewGroup parent) {
    for(int i = 0; i < mItemList.size(); i++){
        final ItemL product = (ItemL) mItemList.get(i);
        View aLayout = inflater.inflate(R.layout.radio_layout,  parent, false);
        ((ViewGroup) topLayout).addView(aLayout);

        View rrrt = inflater.inflate(R.layout.group_radio_layout,  parent, false);
        ((ViewGroup) aLayout).addView(rrrt);    

        RadioGroup radioGroup = (RadioGroup) rrrt.findViewById(R.id.aditivs_radio_group);
        radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch(checkedId) {
                case R.id.radio_alergen_yes_contian:
                    product.setContain(true);
                    break;
                case R.id.radio_alergen_not_contain:
                    product.setContain(false);
                    break;
                }
            }
        }); 


        RadioButton yesContain = (RadioButton) rrrt.findViewById(R.id.radio_alergen_yes_contian);
        RadioButton notContain = (RadioButton) rrrt.findViewById(R.id.radio_alergen_not_contain);
        if(product.isContain() != null){
            if(product.isContain().booleanValue()){
                yesContain.setChecked(true);
                System.out.println("#contain yes#");
            }
            else{
                notContain.setChecked(true);
                System.out.println("#contain not#");
            }
        }
    }
}
}



class HolderItemL {

public static ArrayList<ItemL> listItems = new ArrayList<ItemL>();
private static HolderItemL sHolderItemL;
private Context mAppContext;

private HolderItemL(Context context){
    mAppContext = context;
    for(int i = 0; i < 2; i++){
        ItemL l = new ItemL();
        listItems.add(l);
    }
}

public static HolderItemL get(Context c) {
    if(sHolderItemL == null){
        sHolderItemL = new HolderItemL(c.getApplicationContext());
    }
    return sHolderItemL;
}

public ArrayList<ItemL> getList(){
    return listItems;
}
}



class ItemL {

private Boolean contain;

public Boolean isContain() {
    return contain;
}

public void setContain(boolean contain) {
    this.contain = contain;
}
 }

的xml:Activiti_main

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

的xml:Fragment_main

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/top_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


</LinearLayout>

</ScrollView>

的xml:group_radio_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RadioGroup
        android:id="@+id/aditivs_radio_group"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/radio_alergen_yes_contian"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="yes_contian" />

        <RadioButton
            android:id="@+id/radio_alergen_not_contain"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="not_contain" />
    </RadioGroup>


</LinearLayout>

xml:radio_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/alergen_name_title"
    style="?android:listSeparatorTextViewStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:text="title" />

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

我确实解决了这个问题,删除了单选按钮的xml文件并动态显示了它们。 现在所有逻辑都正常工作。

确实,我仍然不知道xml导致错误的原因。所以任何解释都表示赞赏。