2013-01-10 42 views
0

我有一个显示多个复选框的android视图。它们都是动态添加的,并且我为每个部分设置了一个文本。安卓复选框在切换到横向时更改文本

public class MainActivity extends Activity { 

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

     LinearLayout layout = (LinearLayout) findViewById(R.id.layout); 
     LayoutInflater inflater = getLayoutInflater(); 

     for (String string : getResources().getStringArray(R.array.string_array)) { 
      LinearLayout searchField = (LinearLayout) inflater.inflate(R.layout.cb, null); 

      CheckBox checkBox = (CheckBox) searchField.findViewById(R.id.checkBox1); 
      checkBox.setText(string); 
      layout.addView(searchField, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
     } 
    } 
} 

从代码中可以看到,我有一个字符串数组,并为数组中的每个字符串添加一个复选框。首次显示视图时,所有复选框都具有正确的文本,但在将设备旋转到横向或纵向模式后,所有复选框都具有相同的文本(来自最后一个复选框)。任何旋转(重画屏幕)都不会影响文本。它们都保留在最后一个复选框的文本中。

我已经看过调试器,复选框对象是每个字符串的新对象,所以我不使用同一个对象实例。我目前没有想法。

你知道为什么会发生这种情况吗?

回答

0

当您旋转屏幕时,运行时资源被更改,并且活动被重新启动。两种方法来解决你的问题:

  1. 握住你所有的复选框的值在OnCheckedChangeListener和重置他们回到onResume
  2. 由自己处理onConfigurationChanged,根据https://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
+0

的问题是不是与复选框的值,它实际上是出现在复选框的文本。这应该保持不变,考虑这行“checkBox.setText(string);” –