2017-10-05 230 views
1

我有一個帶有多個切換按鈕的片段。點擊我的活動中的特定按鈕,我想將所有這些切換按鈕的狀態上傳到服務器。我發現有一種方法可以在下面的鏈接中進行解釋,我們在這裏創建了一個監聽器接口,並且在每次點擊每個切換按鈕時,我們更新與每個切換按鈕對應的活動中的一些標籤/整數。片段和活動之間的溝通

https://developer.android.com/training/basics/fragments/communicating.html

但我想知道是否有什麼辦法可以知道從活動的片段全部切換按鈕的選中/取消選中狀態,而無需每次實施的接口方法的一個切換按鈕被點擊。希望我清楚。

回答

1

下面是如何實現這一目標的工作示例。活動:

public class MainActivity extends AppCompatActivity { 
    ToggleFragment toggleFragment; 
    Button updateStatusButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main_activity); 

     updateStatusButton = (Button) findViewById(R.id.updateStatusButton); 

     toggleFragment = ToggleFragment.newInstance(); 

     getSupportFragmentManager().beginTransaction() 
            .replace(R.id.main_frame, toggleFragment, "ToggleFragment") 
            .commit(); 

     updateStatusButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       boolean buttonsChecked = toggleFragment.areToggleButtonsChecked(); 

       Toast.makeText(MainActivity.this, String.format("Toggle buttons checked: %s", buttonsChecked), Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
} 

和碎片:

public class ToggleFragment extends Fragment { 
    ToggleButton toggleButton1; 
    ToggleButton toggleButton2; 
    ToggleButton toggleButton3; 

    public static ToggleFragment newInstance() { 
     Bundle args = new Bundle(); 
     ToggleFragment fragment = new ToggleFragment(); 

     fragment.setArguments(args); 

     return fragment; 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.toggle_fragment, container, false); 

     toggleButton1 = (ToggleButton) view.findViewById(R.id.toggleButton1); 
     toggleButton2 = (ToggleButton) view.findViewById(R.id.toggleButton2); 
     toggleButton3 = (ToggleButton) view.findViewById(R.id.toggleButton3); 

     return view; 
    } 

    public boolean areToggleButtonsChecked() { 
     return toggleButton1.isChecked() 
       && toggleButton2.isChecked() 
       && toggleButton3.isChecked(); 
    } 
} 
+0

它甚至有可能叫 「toggleFragment.toggleButton1.isChecked()」 的活動?即使我們將Buttons公開爲片段,我也不認爲這會起作用。我剛剛證實,並沒有奏效。我錯過了如何從活動中實例化toggleFragment的問題 –

+0

關於第二條建議,我如何從活動中調用此函數。那就是我想要的布爾返回 –

+0

我剛剛編輯了一個工作示例的答案,在我的手機上進行了測試。 – Tharkius

0

老實說,你可以完成這個的最好方法是從Android Architecture Components庫中獲取ViewModelViewModel可以具有每個碎片可以觀察到的值ObservableFieldLiveData,並且始終具有正確的信息。這也會讓生命週期感知更容易。