我正在创建一个应用程序,当应用程序关闭并再次打开时,我必须保存动态创建的Android.Widget.Button-Objects及其属性,如ID。 这些按钮保存在ArrayList中。
我的想法是将我的Button-Objects转换为JSON并将它们保存在SharedPreference中。
我的问题现在是我无法将按钮转换为JSON,我正在使用以下代码,如果在stackoverflow上找到:
(对于试用我正在使用新的按钮对象)
Button btn = new Button(this);
Gson gson = new Gson();
String json = gson.toJson(btn);
它使用String-Object或Integer-Object但不使用Button-Object。
有人可以帮助我吗?
答案 0 :(得分:1)
如果您动态创建按钮,则意味着您可能会为它们设置颜色,文本...... 因此,当您想要保存它们时,您只需要知道您拥有多少按钮以及您为每个按钮设置的自定义属性。
所以你可以这样做: 您可以管理2个列表,一个包含按钮,另一个包含自定义属性。 为了使其更容易,您可以使用自定义ButtonBuilder来管理属性。 每次需要一个新按钮时,您都可以创建一个新的ButtonBuilder,设置属性,生成按钮,并将构建器和按钮存储在两个单独的列表中。然后,您可以在SharedPrefs中存储构建器列表,并在下次打开应用程序时从此列表中重新生成按钮。
List<ButtonBuilder> mBuilders = new ArrayList<>();
List<Button> mButtons = new ArrayList<>();
/**
* Display a new button
*/
public void addButton(/* List of parameters*/) {
ButtonBuilder builder = new ButtonBuilder()
.setBgColor(myColor)
.setText(myText);
Button button = builder.build(context);
mBuilders.add(builder);
mButtons.add(button);
// ... Display the button
}
/**
* Call this method when you need to regenerate the buttons
*/
public void regenerateButtonsOnStart() {
// Get from shared preferences
mBuilders = getBuildersFromSharedPrefs();
Button btn;
for (ButtonBuilder builder : mBuilders) {
btn = builder.build(context);
mButtons.add(btn);
// ... Display the button
}
}
/**
* Custom button builder
*/
public class ButtonBuilder {
private int mBgColor;
private String mText;
// ... whatever you want
public ButtonBuilder() {
}
public ButtonBuilder setBgColor(int bgColor) {
this.mBgColor = bgColor;
return this;
}
public ButtonBuilder setText(String text) {
this.mText = text;
return this;
}
public Button build(Context context) {
Button btn = new Button(context);
btn.setText(mText);
btn.setBackgroundColor(mBgColor);
return btn;
}
}