2

如何从 Fragment 访问 Activity 内的 Button。实际上我设置 myButton 被禁用但是当我的一些单选按钮被点击时我想设置 myButton 启用?

4

2 回答 2

5

您可以尝试几件事。第一个是用来getActivity().findViewByIt(id)获取Button,我认为它应该可以工作,但从工程方面来看这不是一个好的解决方案,因为您会对托管它Fragment的布局做出假设。Activity第二个是提供一个回调接口,如此处所述。每次复选框更改状态时只需调用回调方法。这种方法更好,因为Fragment任何实现回调接口的活动都可以自由地重用它。最后但并非最不重要的一点是,如果可能,您应该尝试将片段放入Button片段内部。

于 2013-03-01T22:10:07.783 回答
4

这是一个例子:

在 MyFragment.java 中

public MyFragment extends Fragment {
    public interface Callback {
        public void onRadioButtonClicked(View radioButton);
    }

    private Callback callback;

    @Override
    public void onAttach(Activity ac) {
        super.onAttached(ac);
        callback = (Callback)ac;
    }

    @Override
    public void onDetach() {
        callback = null;
        super.onDetach();
    }

    ....
    ....
       radioButton.setOnClickListener(new OnClickListener() {
           public void onClick(View view) {
               if (callback != null) {
                   callback.onRadioButtonClicked(view);
               }
           }
       });
}

在托管/包含 MyFragment 的 MyActivity.java 中:

public MyActivity extends Activity implements MyFragment.Callback {

    ...
    @Override
    public void onRadioButtonClicked(View radioButton) {
        // The radiobutton in MyFragment has been clicked
        myButton.setEnabled(true); // or something like this.
    }

}

该设计使用MyFragment.Callback接口将托管 Activity 的细节远离 Fragment,只要 Activity 实现,就允许 Fragment 由任何 Activity 托管MyFragment.Callback

于 2013-03-01T22:12:57.500 回答