2017-10-05 5 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()"활동에 전화도 가능합니까? 우리가 단편화 된 버튼을 공개한다고해도, 이것이 효과가 있다고 생각하지 않습니다. 방금 확인했는데 작동하지 않았습니다. 당신이 인스턴스화하는 방법에 뭔가 빠져 있습니까? 활동에서 파편 –

+0

두 번째 제안에 관해서 어떻게이 함수를 활동에서 호출해야합니까? 그 곳에서 부울을 돌려주고 싶습니다. –

+0

방금 ​​작업 예제로 대답을 편집하고, 제 휴대폰에서 테스트했습니다. – Tharkius

0

솔직히, 이것을 달성 할 수있는 가장 좋은 방법은 Android Architecture Components 라이브러리의 ViewModel입니다. ViewModel은 각 조각이 관찰 할 수 있고 항상 올바른 정보를 가지고있는 ObservableField 또는 LiveData 값을 가질 수 있습니다. 이렇게하면 라이프 사이클을 쉽게 인식 할 수 있습니다.