java-如何在Android中更改设备方向后保持列表视图项的突出显示

java-如何在Android中更改设备方向后保持列表视图项的突出显示,第1张

概述我有一个用数据填充的列表视图.用户可以长按某个行,该行将突出显示,并且上下文 *** 作栏也将显示该行已被选中.如果用户选择更多行,则上下文 *** 作栏中的所选行数会增加.但是,一旦我更改了设备的方向,高光就消失了,但列表项显示为选中状态.我尝试使用选择器,但没有帮助.在XML中,我使每一

我有一个用数据填充的列表视图.用户可以长按某个行,该行将突出显示,并且上下文 *** 作栏也将显示该行已被选中.如果用户选择更多行,则上下文 *** 作栏中的所选行数会增加.但是,一旦我更改了设备的方向,高光就消失了,但列表项显示为选中状态.我尝试使用选择器,但没有帮助.在XML中,我使每一行都具有ActivatedBackgroundindicator作为其背景.

有谁知道为什么高光消失了?谢谢.

这是onSaveInstanceState代码:

@OverrIDepublic voID onSaveInstanceState(Bundle outState) {    //check if any items are selected    if (ListVIEw.getCheckedItemCount() > 0) {        //get the List of selected items and convert it to an int Array        //because SparseBooleanArray cannot be stored in a bundle        SparseBooleanArray selectedItems = ListVIEw.getCheckedItempositions();        int[] selectedItems_intArray = new int[ListVIEw.getCheckedItemCount()];        for (int i = 0; i < selectedItems.size(); i++) {            if (selectedItems.valueAt(i) == false)                continue;            selectedItems_intArray[i] = selectedItems.keyAt(i);        }        outState.putIntArray("Selected Items", selectedItems_intArray);    }}

这是onCreate中的代码:

       if (savedInstanceState != null) {            int[] checkedItems = savedInstanceState.getIntArray("Selected Items");            if (checkedItems != null) {                for (int i = 0; i < checkedItems.length; i++) {                   ListVIEw.setItemChecked(checkedItems[i], true);                    adapter.setNewSelection(checkedItems[i], true);                }            }        }

编辑:

这是ListvIEw活动的一部分:

    <activity        androID:name="com.newapp.MainListActivity"        androID:label="@string/app_name"        androID:configChanges="orIEntation"        >        <intent-filter>            <action androID:name="androID.intent.action.MAIN" />            <category androID:name="androID.intent.category.LAUNCHER" />        </intent-filter>    </activity>

解决方法:

当您旋转设备时,当前活动将被销毁并重新创建.

您可以将选定的元素存储在onPause()上,然后在onResume()中进行选择,或者可以使用更简单的解决方案:当设备旋转时,不允许AndroID破坏您的活动.

为此,您可以将其添加到AndroIDManifest中该活动的部分:

<activity androID:configChanges="orIEntation|screenSize"...</activity>

注意:如果愿意,您也可以对整个应用程序执行相同 *** 作(在应用程序部分中添加相同的androID:configChanges =“ orIEntation | screenSize”).

编辑:

我的第一个答案是使用androID:configChanges =“ orIEntation”.我的第二个内容是使用androID:configChanges =“ orIEntation | screenSize”.

对于那些想知道为什么的人,事情很简单:

>将方向添加到清单后,您将告诉AndroID“不必担心方向更改,我可以处理”.因此,当设备的方向发生变化时,AndroID无需担心破坏和重新创建活动.
>将清单上的screenSize添加到清单中,您将告诉AndroID“不必担心屏幕尺寸的更改,我可以处理”.在我们的情况下,这不是必需的,但是有必要.原因是某些版本的AndroID(我真的不记得是哪个版本)对此有些愚蠢.当设备垂直放置时,它的像素为480×800;当它处于水平位置时,它具有800×480像素.因此,屏幕尺寸确实发生了变化.某些版本的AndroID足够聪明,可以识别这种“屏幕尺寸变化”,因此他们将其视为androID:configChanges =“ orIEntation”设置的一部分;某些AndroID版本不是那么聪明,您必须同时指定两者.

注意:使用这种技术时,请注意AndroID不会处理设备旋转.因此,如果纵向模式和横向模式的布局不同,则必须自己进行更改(但我建议不要使用此方法,即使对于只有一种布局类型的应用程序来说更容易).

总结

以上是内存溢出为你收集整理的java-如何在Android中更改设备方向后保持列表视图项的突出显示全部内容,希望文章能够帮你解决java-如何在Android中更改设备方向后保持列表视图项的突出显示所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1088344.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存