我有一个有多个按钮的片段。在单击活动中的特定按钮时,我希望将所有这些切换按钮的状态上传到服务器。我看到了这样做的一种方法,在下面的链接中,我们创建了一个侦听器接口,在每个切换按钮的每一次单击中,我们都会更新相应于每个切换按钮的活动中的一些标记/整数。
https://developer.android.com/training/basics/fragments/communicating.html
但是,我想知道是否有任何方法可以从活动中了解片段中所有切换按钮的选中/未检查状态,而无需在每次单击切换按钮时实现接口方法。希望我能说清楚。
发布于 2017-10-05 19:50:09
下面是一个如何实现这一目标的工作示例。活动:
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();
}
}发布于 2017-10-05 19:30:21
老实说,实现这一点的最好方法是使用来自Architecture组件库的ViewModel。ViewModel可以有一个ObservableField或LiveData值,每个片段都可以观察到,并且总是有正确的信息。这也将使人们更容易意识到生命周期。
https://stackoverflow.com/questions/46593378
复制相似问题