2013-11-25 3 views
1

Для меня очень странная ошибка. Я сделал что-то подобное с TextView, и все работает как шарм, поэтому я предполагаю, что он должен работать и для Radio Buttonнесколько переключателей, не показанных на Android - странное поведение

У меня проблема с переключателем в андроиде. Когда я устанавливаю значение на одной кнопке, все в порядке. Но когда я вращаю устройство, начинает происходить что-то странное.

ИЛИ значения не показаны, или все то же самое значение, или это невозможно нажать на значение, которое было ранее установлено (и это невидимый)

Я проверить сохраненные значения, и они ОК. Может кто-нибудь объяснить мне, что я делаю неправильно? спасибо.

код:

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> 

ответ

0

я решить эту проблему, удалив файлы XML для радио-кнопок, и я показал их динамически. Теперь вся логика работает нормально.

Ну, это правда, что я до сих пор не знаю, из-за чего возникает ошибка с xml. Поэтому любое объяснение ценится.

Смежные вопросы