java - Android ListActivity : onCreate is called every time after screen rotation, 所选项目重置,但视觉上仍保持选中状态

标签 java android listview screen-orientation listactivity

如果屏幕不旋转,包含 TextViewListView 对象的简单 ListActivity 可以正常工作。

问题描述。首次运行应用时,TextView myText 显示-1。有用。当点击不同的项目时,myText 设置/显示所选项目 ID(或位置)的值。所以,它也有效。在某个时刻,例如,当选择项目 TwomyText 显示 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/

相关文章:

android - 如何通过 ACTION_VIDEO_CAPTURE 操作将文件输出设置为 mp4?

android - 如何将 drawable 文件夹中的图像添加到 Android Studio 1.2 中的 ImageView?

android - AlarmManager.RTC_WAKEUP 在关闭时不会唤醒我的 Android 设备

android - 如何在自定义 ListView 中查找其他(复选框) View

android - 通过 ListView 检查动态生成的复选框时出现问题

java - "SQLException: Missing IN or OUT parameter"尽管已明确注册

java - 奇怪的接口(interface)实现

java - 更新扩展 ArrayAdapter 的 ListView 时出现 ConcurrentModificationException

java - Jackson ReadValue 不会转换为 List<>

java - 如何卡住 HashMap 以防止进一步更改?