如何从Fragment中访问Activity内的Button。实际上我设置myButton是禁用的但是当我点击了一些我的radioButton时我想设置myButton吗?
答案 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。