2013-03-01 52 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