如何在配置更改中保存按钮?

时间:2017-07-17 15:15:04

标签: android

在我的活动中,我有一个按钮字段。它的值始终是在活动中动态创建的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的值?

1 个答案:

答案 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;
            }