切换到横向时,Android复选框会更改文本

时间:2013-01-10 12:34:28

标签: android checkbox landscape-portrait

我在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));
        }
    }
}

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

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

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

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

  1. 保留OnCheckedChangeListener中所有复选框的值,然后将其重置回onResume
  2. 根据https://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
  3. 自行处理onConfigurationChanged