如何从Fragment访问Activity里面的Button

时间:2013-03-01 22:00:50

标签: java android

如何从Fragment中访问Activity内的Button。实际上我设置myButton是禁用的但是当我点击了一些我的radioButton时我想设置myButton吗?

2 个答案:

答案 0 :(得分:5)

你可以尝试一些事情。第一个是使用getActivity().findViewByIt(id)来获取Button,我认为这应该有用,但是从工程方面来看,这不是一个好的解决方案,因为你的Fragment会假设{ {1}}托管它的布局。第二种是提供here所述的回调接口。每次复选框更改状态时,只需调用回调方法。这种方法更好,因为任何实现回调接口的活动都可以自由地重用Activity。最后但并非最不重要的是,如果可能的话,你应该尝试将Fragment置于片段内。

答案 1 :(得分: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接口将托管活动的详细信息远离Fragment,只要活动实现MyFragment.Callback,就允许任何Activity托管Fragment。