这是一个出于好奇的问题。
我最近刚刚了解到,我必须关心自己的活动状态。
但在我的一个Layouts中,Edittext只是保留了它的价值,我不知道为什么? 显然我想为其他EditTexts重现这种行为......
继承布局,编辑文本是android:id =“@ + id / createlistactivity_listname_edittext”
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/title_bar"
android:gravity="center"
android:text="Enter a Name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/createlistactivity_listname_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:hint="Name..."
android:singleLine="true" >
</EditText>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/CreateListActivity_HeaderLabel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/title_bar"
android:gravity="center"
android:text="Add Products to your new List"
android:textAppearance="?android:attr/textAppearanceLarge" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:choiceMode="multipleChoice"
android:footerDividersEnabled="true" >
</ListView>
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="No Products available. Insert some Products in the Products menu first" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:id="@+id/CreateListActivity_BottomBar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:weightSum="2"
style="@android:style/ButtonBar" >
<ImageButton
android:id="@+id/CreateListActivity_SaveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@android:color/transparent"
android:onClick="saveButtonClicked"
android:src="@drawable/tick_32" />
<ImageButton
android:id="@+id/CreateListActivity_CancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@android:color/transparent"
android:onClick="cancelButtonClicked"
android:src="@drawable/block_32_2" />
</LinearLayout>
</LinearLayout>
,这是活动的onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.createlistactivity_layout);
_selectedItems = new HashMap<Integer, Integer>();
_productDAO = new ProductDAO(getApplication());
_listDAO = new ListDAO(getApplication());
_productCursor = _productDAO.getAllProductsCursor();
startManagingCursor(_productCursor);
setUpListView();
final EditText listNameEditText = (EditText)this.findViewById(R.id.createlistactivity_listname_edittext);
listNameEditText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(listNameEditText
.getApplicationWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
}
这是另一个包含不保留其状态的edittexts的活动的代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableLayout
android:id="@+id/TableLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/productImage"
android:background="@android:drawable/alert_light_frame" >
<TableRow
android:id="@+id/productview_toprow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top" >
<EditText
android:id="@+id/productview_productname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:hint="Product Name"
android:singleLine="true" >
<requestFocus />
</EditText>
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:text="@string/productview_pricelabel"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/black" />
<EditText
android:id="@+id/productview_price_edittext"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="0.0"
android:singleLine="true"
android:inputType="numberDecimal" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical|center_horizontal"
android:text="@string/productview_unitlabel"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/black" />
<EditText
android:id="@+id/productview_unit_edittext"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="kg|ml|..." />
</TableRow>
</TableLayout>
和onCreate ......
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.productview);
_productName = (EditText)findViewById(R.id.productview_productname);
_productPrice = (EditText)findViewById(R.id.productview_price_edittext);
_productUnit = (EditText)findViewById(R.id.productview_unit_edittext);
_productImage = (ImageButton)findViewById(R.id.productImage);
_productDAO = new ProductDAO(getApplication());
//set data from database
_product = _productDAO.getProduct(getIntent().getExtras().getString(DataBaseKeys.PRODUCT_NAME));
if(_product != null)
{
_productName.setText(_product.getName());
_productImage.setImageBitmap(_product.getIcon());
_productPrice.setText(""+_product.getPrice());
_productUnit.setText(_product.getUnit());
_productIcon = _product.getIcon();
}
}
答案 0 :(得分:4)
android中的View
确实保留了一些状态。与EditText
一样保留其文字,因此您无需保存onSaveInstanceState
。其他示例是ListView
保持滚动位置。 EditText
如果是多行文字,也会保持滚动位置。
但是,如果您正在使用Note App,用户必须采取一些措施,您必须存储正在编辑的Note ID,以便在更改方向时您知道自己在做什么。
这是Android的标准方式,这里没什么不寻常的。有关详细信息,请参阅。
关于您的某项活动不符合预期的原因是代码:
_product = _productDAO.getProduct(getIntent().getExtras().getString(DataBaseKeys.PRODUCT_NAME));
if(_product != null)
{
_productName.setText(_product.getName());
_productImage.setImageBitmap(_product.getIcon());
_productPrice.setText(""+_product.getPrice());
_productUnit.setText(_product.getUnit());
_productIcon = _product.getIcon();
}
您正在覆盖编辑文本的值。在if
语句之前尝试此日志语句。
Log.i("EDIT_NOT_WORKING", "VALUE OF EDIT: " + _productName.getText());
您应该看到它将打印输入的值。
答案 1 :(得分:0)
如果您没有为您的editText提供ID,则不会在屏幕更改中保存该值。您必须提供一个ID,以便保存该值,即使屏幕更改了方向。