在我的活动中,我有一个按钮字段。它的值始终是在活动中动态创建的LinearLayout中当前选定的按钮。我希望此字段始终指向当前选定的按钮,但是,如果我选择一个按钮然后更改配置,该字段将不再指向所选按钮。我该怎么做才能在配置更改中保存此值? 这是我的代码:
Activity.java
public class Activity extends AppCompatActivity {
Button myButton;
LinearLayout myLayout;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
for (int i = 0; i < 2; i++) {
LinearLayout row = new LinearLayout(this);
LayoutParams rowParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1f);
row.setLayoutParams(rowParams);
for (int j = 0; j < 2; j++) {
final Button button = new Button(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setMyButton(button);
}
});
}
row.addView(button);
}
myLayout.addView(row);
}
public void setMyButton(Button button) {
myButton = button;
}
}
我已经研究过使用一些savedInstanceState方法但是没有一个方法可以用于Button,只有整数和布尔值。 我可以做什么,以便在配置更改时保留myButton的值?
答案 0 :(得分:0)
只要您有某种方法识别要保存的按钮,就可以使用onSaveInstanceState()
;你不必保存按钮本身。
通常情况下,您可以使用按钮id
来实现此目的,但由于您在运行时动态创建按钮(而不是将它们放在XML布局中)我建议改用按钮tag
。
在onSaveInstanceState()
中保存按钮标记,然后在创建按钮时,如果创建具有相同标记的按钮,请将其另存为myButton
。< / p>
onSaveInstanceState()
:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("myButtonTag", myButton != null ? (String) myButton.getTag() : null);
}
位于onCreate()
的顶部:
String myButtonTag = null;
if (savedInstanceState != null) {
myButtonTag = savedInstanceState.getString("myButtonTag");
}
在内部for
循环中:
final Button button = new Button(this);
String tag = i + "," + j;
button.setTag(tag);
if (tag.equals(myButtonTag)) {
myButton = button;
}