EditText在方向更改时表现得很奇怪

时间:2015-07-09 11:32:20

标签: android android-layout android-edittext

请参阅以下[[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setBarTintColor:[UIColor yourColor]]; [[UIBarButtonItem appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setTintColor:[UIColor yourColor]]; [[UINavigationBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor yourColor], NSFontAttributeName : [UIFont yourFont]}]; //navigation bar title [[UISearchBar appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setBarTintColor:[UIColor yourColor]]; [[UITableView appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setSectionIndexColor:[UIColor yourColor]]; [[UITableViewHeaderFooterView appearanceWhenContainedIn:[ABPeoplePickerNavigationController class], nil] setTintColor:yourColor];

Activity

布局public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinearLayout linearLayout = (LinearLayout) findViewById(R.id.root); for (int i = 0; i < 8; i++) { EditText editText = (EditText) LayoutInflater.from(this).inflate(R.layout.edittextlayout, null); editText.setText("#" + i); linearLayout.addView(editText); } } }

R.layout.activity_main

和布局<?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"> <LinearLayout android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> </LinearLayout> </LinearLayout>

R.layout.edittext_layout

启动应用后,看起来我希望:每个<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" /> 都填充了它的索引。

enter image description here

旋转设备后,EditText如下所示:

enter image description here

所有Activity都在那里,但它们都包含相同的文字。

更令我感到困惑的是,在使用

以编程方式创建EditText时,不会发生
EditText

而不是从布局中充气。

那里发生了什么?

您可以查看我的示例并亲自尝试here

编辑:这不是this question的重复,因为在我的情况下,EditText editText = new EditText(this) 中的文字不会翻倍但会在不同EditText之间混淆第

2 个答案:

答案 0 :(得分:4)

尝试为每个View设置一些ID。

例如:

view.setId(id);  

或使用

onSaveInstanceState() - onRestoreInstanceState()

用于保存信息。

答案 1 :(得分:0)

问题是您的活动会在每个方向上重新创建,并且Android处理的实例数据处理错误。您可以通过为动态创建的视图设置ID来避免它,也可以  覆盖onSaveInstanceState方法以保存您的edittexts中的文本数据,并在onCreate方法上恢复它,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Check if we're recreating
    if (savedInstanceState != null) {
        // Restore value of edittext from saved state
            editText.setText(savedInstanceState.getString("edittext"));
    }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putString("edittext", editText.getText().toString());
    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

如果在执行此操作后遇到类似问题,请尝试覆盖onRestoreInstanceState方法以防止android执行您的工作。

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    //do nothing
}