2017-07-17 54 views
0

在我的活動中,我有一個字段是一個按鈕。它的值始終是在活動中動態創建的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方法,但他們都沒有一個按鈕,只有整數和布爾值。 我該怎麼做才能在配置更改時保留myButton的值?

+0

你可以保存所有按鈕的數組當你產生這些然後只保存數組中的數組索引(一個int)。 – Henry

+0

謝謝!這對我很好。 –

回答

0

只要你有一定的方法可以使用onSaveInstanceState()識別你想保存的按鈕;你不必保存按鈕本身。

通常情況下,您可以使用按鈕的id用於此目的,但由於您在運行時動態創建按鈕(而不是將它們放入XML佈局中),我建議使用按鈕的tag

將按鈕的標籤保存在onSaveInstanceState()中,然後當您創建按鈕時,如果您創建了具有相同標籤的按鈕,請將其保存爲myButton

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