android - 如何在片段中按钮的可见性上使用 onSaveInstanceState?
问题描述
在我的片段中,每当我单击它时,我的按钮都会将其可见性更改为 GONE。当我旋转屏幕时,我希望能见度保持消失。我正在使用 onSaveInstanceState,但我想为 outState 添加什么帮助。
任何帮助将不胜感激,谢谢!
public class PlaylistsFragment extends Fragment {
private Button add1;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_playlists, container, false);
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.
}
@Override
public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
final Button add1 = (Button) getView().findViewById(R.id.p_add1);
add1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
add1.setVisibility(View.GONE);
}
});
}
}
解决方案
尝试这个:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
savedInstanceState.putInt("button_visibility", add1.getVisibility());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
myButtonVisibility = savedInstanceState.getInt("button_visibility", 0);
}
例如在 onCreate 中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
add1 = (Button)findViewById(R.id.p_add1);
if (savedInstanceState != null) {
int buttonVisibility = savedInstanceState.getInt("button_visibility", 0);
// here will IDE complaint about setting only integer
add1.setVisibility(buttonVisibility == View.VISIBLE ? View.VISIBLE : View.GONE)
}
}
如果您有更多问题,您绝对应该查看本教程: saveInstanceState 教程
享受。
推荐阅读
- typescript - 在 TypeScript 中扩展参数化接口的通用接口
- python - 嵌套 JSON 字典和列表
- linux - 如何为 VM 资源 azurerm_virtual_machine_scale_set 的每个实例执行具有不同参数的脚本?
- arrays - 如何将数据插入到 Hive 中的 Struct 数组中
- drools - 我需要在运行时添加 .drl 文件(来自 S3 存储桶)并将其提供给 drools 规则引擎
- java - Spring WebFlux中的同步方法?
- c# - 使用 HttpClient 或 HttpWebRequest 修改 TLS SNI
- cordova - 蓝牙打印科尔多瓦
- c - 在代码中引用时的 argc 位置问题
- c# - 支持的文化数量不同