如果屏幕不旋转,包含 TextView
和 ListView
对象的简单 ListActivity
可以正常工作。
问题描述。首次运行应用时,TextView myText
显示-1
。有用。当点击不同的项目时,myText
设置/显示所选项目 ID(或位置)的值。所以,它也有效。在某个时刻,例如,当选择项目 Two
且 myText
显示 2
时,我旋转屏幕并 myText
变为 -1
(因为 onCreate
再次触发),因此这意味着 ListView myList
清除选择,但项目 Two
> 仍然保持选中状态(绘制为选中的单选按钮)。有什么问题? (P.S. GridView 也会发生同样的情况)。
这是我的源代码:
activity_test.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".TestActivity">
<include layout="@layout/content_test" />
</android.support.design.widget.CoordinatorLayout>
<小时/>
content_test.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TestActivity">
<TextView
android:id="@+id/myText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/myText"
android:choiceMode="singleChoice"/>
</RelativeLayout>
<小时/>
TestActivity.java
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class TestActivity extends ListActivity {
static String[] items = {"Zero", "One", "Two"};
TextView myText;
ListView myList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
myList = (ListView) findViewById(android.R.id.list);
setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_single_choice, items));
myText = (TextView) findViewById(R.id.myListViewSelectedText);
myText.setText(String.valueOf(myList.getSelectedItemPosition()));
}
@Override
public void onListItemClick(ListView parent, View view, int position, long id) {
myText.setText(String.valueOf(position));
}
}
最佳答案
试试这个
<activity
android:name=".TestActivity"
android:label="@string/title_activity_test"
android:theme="@style/AppTheme"
android:configChanges="orientation|keyboardHidden|screenSize"/>
关于java - Android ListActivity : onCreate is called every time after screen rotation, 所选项目重置,但视觉上仍保持选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36891610/