方向更改时的 Android 按钮状态

标签 android button state

我在保持按钮状态时遇到问题 - 比如 Button1.setActivated(true)。当方向改变时,这将被遗忘,并且不会重新激活或显示为已激活。

我想我可以使用 IF 来测试 Button 状态的状态,将其存储在一个变量中,然后使用 onSaveInstanceState/onRestoreInstanceState 将其返回。然后在重新创建每个按钮时添加更多检查。但这似乎是一种非常复杂的做事方式。

肯定会有更好的方法来做到这一点吗?

我对 Android 还是很陌生,所以我可能会遗漏一些明显的东西。

谢谢。

更新:setActivated 使用选择器更改按钮的背景颜色。正是这种颜色在方向变化中被遗忘了。

按钮选择器背景.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/button_background_active"
      android:state_activated="true" />

    <item android:drawable="@color/button_background" />

</selector>

主 Activity .java

 public void onClick(View arg0) {

  switch(arg0.getId()){

   case R.id.button_1:
     button_1.setActivated(true);
  }
}

最佳答案

这就是 Android 的工作原理。建议您使用 onSaveInstance/onRestoreInstance 进行修复是处理它的正确方法。这是必要的原因是因为您的整个 Activity 被销毁并重新创建。那些保存的包是将 Activity 状态恢复到之前状态的关键。你可以在这里读更多关于它的内容: Saving State

请注意,恢复状态的需要不仅仅发生在屏幕方向等配置更改期间。当用户后台是您的应用程序并稍后重新打开它时,可能会发生这种情况。还有很多其他情况。使用保存/恢复状态可确保它能够处理所有这些情况并正确恢复您的 Activity ...在您的情况下,激活该按钮。

关于方向更改时的 Android 按钮状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875350/

相关文章:

android - FrameLayout 与我嵌入在 CoordinatorLayout 中的 BottomAppBar 重叠

android - onLongClickListener 和位置问题

android - float 按钮 Android Lollipop

swift - 如何在不打印两次数据的情况下重新加载 UITableView?

location - 是否有任何 API 可用于获取所有国家/地区并通过国家/地区获取所有州/地区并再次通过州/地区获取其中的所有城市

android - 非法状态异常 : Fragment already added appears if a App was very long in the background

android - 在 ionic 2 中使用 SQLite 时出现 sqlitePlugin 错误

javascript - 将数据从 div 标签传递到 javascript 函数

android - 不必创建无限量的 onClickListeners

javascript - React 表单 onChange 处理程序设置错误键的状态