Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android ListActivity:onCreate每次在屏幕旋转后都会被调用,所选项目会重置,但视觉上仍处于选中状态_Java_Android_Listview_Screen Orientation_Listactivity - Fatal编程技术网

Java Android ListActivity:onCreate每次在屏幕旋转后都会被调用,所选项目会重置,但视觉上仍处于选中状态

Java Android ListActivity:onCreate每次在屏幕旋转后都会被调用,所选项目会重置,但视觉上仍处于选中状态,java,android,listview,screen-orientation,listactivity,Java,Android,Listview,Screen Orientation,Listactivity,如果屏幕不旋转,包含TextView和ListView对象的简单ListActivity可以正常工作 问题描述。首次运行应用程序时,text查看myText显示-1。它起作用了。单击不同项目时,设置/显示所选项目id(或位置)的值。因此,它也能起作用。在某个特定时刻,例如选择了项Two,并且myText显示2时,我旋转屏幕,myText变为-1(因为onCreate再次触发),这意味着ListView myList清除选择,但项Two仍然保持选中状态(画成选中的单选按钮)。有什么问题吗?(注:G

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

问题描述。首次运行应用程序时,
text查看myText
显示
-1
。它起作用了。单击不同项目时,设置/显示所选项目id(或位置)的值。因此,它也能起作用。在某个特定时刻,例如选择了项
Two
,并且
myText
显示
2
时,我旋转屏幕,
myText
变为
-1
(因为
onCreate
再次触发),这意味着
ListView myList
清除选择,但项
Two
仍然保持选中状态(画成选中的单选按钮)。有什么问题吗?(注:GridView也有同样的情况)

以下是我的源代码:

活动测试.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>
<?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>


content\u 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>
<?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));
    }
}
导入android.app.ListActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
公共类TestActivity扩展了ListActivity{
静态字符串[]项={“零”、“一”、“二”};
文本查看我的文本;
列表视图myList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_测试);
myList=(ListView)findViewById(android.R.id.list);
setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_single_choice,items));
myText=(TextView)findViewById(R.id.myListViewSelectedText);
myText.setText(String.valueOf(myList.getSelectedItemPosition());
}
@凌驾
public void onListItemClick(列表视图父项、视图视图、整型位置、长id){
myText.setText(String.valueOf(position));
}
}

发生配置更改时,将重新创建所有活动,以确保使用正确的资源

保存所需状态的一种方法是重写
onSaveInstanceState()
将所有需要的数据放入提供的
捆绑
参数。然后,当重新创建活动时,可以从
onCreate()
中提供的
捆绑
参数提取保存的值


只需保存所选列表元素的索引,然后在重新创建时将其设置回原位。

当发生配置更改时,将重新创建所有活动,以确保使用正确的资源

保存所需状态的一种方法是重写
onSaveInstanceState()
将所有需要的数据放入提供的
捆绑
参数。然后,当重新创建活动时,可以从
onCreate()
中提供的
捆绑
参数提取保存的值

只需保存所选列表元素的索引,然后在重新创建时将其设置回原处。

试试这个

  <activity
        android:name=".TestActivity"
        android:label="@string/title_activity_test"
        android:theme="@style/AppTheme"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

试试这个

  <activity
        android:name=".TestActivity"
        android:label="@string/title_activity_test"
        android:theme="@style/AppTheme"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

保存实例是一个更复杂的过程,@danail alexiev是正确的,在某些情况下,您需要手动保存数据,而不是还原数据

但为什么复选框保持选中状态呢?简而言之,这是因为它有自己的
onSaveInstanceState
实现来处理它。还有一些神奇的东西可以调用它,并用视图id映射这个包裹数据。你可以做简单的实验,创建空的应用程序,在布局中添加EditText,无需id-运行它,放置一些文本,改变方向,等等-数据丢失。然后使用id重试


您可以在这里找到很好的解释:

保存实例是一个更复杂的过程,@danail alexiev是正确的,在某些情况下,您手动保存数据,而不是还原数据

但为什么复选框保持选中状态呢?简而言之,这是因为它有自己的
onSaveInstanceState
实现来处理它。还有一些神奇的东西可以调用它,并用视图id映射这个包裹数据。你可以做简单的实验,创建空的应用程序,在布局中添加EditText,无需id-运行它,放置一些文本,改变方向,等等-数据丢失。然后使用id重试


您可以在此处找到很好的解释:

坏主意。如文档所述-这是最后的选择,应该避免使用此属性。此处的更多信息:查找configChanges描述。坏主意。如文档所述-这是最后的选择,应该避免使用此属性。此处的更多信息:查找configChanges描述。