Java 如何从片段访问活动内的按钮

Java 如何从片段访问活动内的按钮,java,android,Java,Android,如何从片段访问活动内的按钮。实际上,我设置我的按钮是禁用的,但是当我的一些单选按钮被单击时,我想将我的按钮设置为启用状态?您可以尝试一些方法。第一种方法是使用getActivity().findViewByIt(id)来获取按钮,我认为它应该可以工作,但从工程角度来看,这不是一个好的解决方案,因为您的片段会对承载它的活动布局进行假设。第二种方法是提供一个回调接口,如下所述。只要在复选框每次更改状态时调用回调方法即可。这种方法更好,因为实现回调接口的任何活动都可以自由地重用片段。最后但并非最不重要

如何从片段访问活动内的按钮。实际上,我设置我的按钮是禁用的,但是当我的一些单选按钮被单击时,我想将我的按钮设置为启用状态?

您可以尝试一些方法。第一种方法是使用
getActivity().findViewByIt(id)
来获取
按钮,我认为它应该可以工作,但从工程角度来看,这不是一个好的解决方案,因为您的
片段
会对承载它的
活动
布局进行假设。第二种方法是提供一个回调接口,如下所述。只要在复选框每次更改状态时调用回调方法即可。这种方法更好,因为实现回调接口的任何活动都可以自由地重用
片段。最后但并非最不重要的一点是,如果可能的话,您应该尝试将
按钮放入片段中。

以下是一个示例:

在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);
               }
           }
       });
}
在MyActivity.java中,它承载/包含一个MyFragment:

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
接口使托管活动的详细信息远离片段,允许任何活动托管片段,只要活动实现
MyFragment.Callback

不要让片段依赖于活动。这是个糟糕的设计。该片段可以由另一个活动托管。使用适当的回调机制。啊,条纹。我看到您也提到了回调接口。