片段与活动之间的沟通

时间:2017-10-05 19:25:59

标签: android android-fragments android-activity interface

我有一个带有多个切换按钮的片段。点击我的Activity中的特定按钮,我想将所有这些切换按钮的状态上传到服务器。我看到有一种方法可以实现,如下面的链接所示,我们创建一个监听器界面,每次点击每个切换按钮时,我们都会更新与每个切换按钮对应的活动中的一些标记/整数。

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

但我想知道是否有任何方法可以知道活动片段中所有切换按钮的已选中/未选中状态,而不会在每次单击切换按钮时实现接口方法。希望我很清楚。

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

老实说,您可以通过Android架构组件库中的ViewModel来实现此目标。 ViewModel可以具有每个片段可以观察到的ObservableFieldLiveData值,并且始终具有正确的信息。这也可以让生命周期更容易识别。