2013-03-01 53 views

回答

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); 
       } 
      } 
     }); 
} 

而在承载/ 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主办。

5

有一些事情你可以试试。第一种是使用getActivity().findViewByIt(id)得到Button,我认为应该工作,但它不是从事物的工程方面,因为你的Fragment有关Activity布局承载它将使假设一个很好的解决方案。第二个是提供一个回调界面,如here所述。每次复选框更改状态时都要调用回调方法。这种方法比较好,因为Fragment可以自由重新使用实现回调接口的任何活动。最后但并非最不重要的,你应该尽量把Button片段里面,如果在所有可能的。

+0

不要让片段依赖于活动。这是糟糕的设计。碎片可以由另一个活动托管。改用适当的回调机制。啊,条纹。我看到你也提到了回调界面。 – 2013-03-01 22:14:18