[英]Listening for activity button clicks from inside a fragment
我剛剛開始學習片段,我有一個活動,這是1000多行代碼,我已經轉換為片段。
我想知道是否有任何簡單的方法來允許我的片段監聽駐留在其父活動的XML中的按鈕。 我嘗試在片段的onCreateView
添加一個常規偵聽器,其中包含按鈕的ID,但它(預期)會給我一個空指針異常。
我知道這樣做的OnSearchClickListener
方法,但它可能需要花費很多時間進行手動重構才能實現我的需要(至少從我能說出的用法,我很高興出錯),所以我想知道是否有人知道任何其他方法以非重復的方式完成這項工作。
您可以嘗試以這種方式獲取活動中的視圖引用:
View view = getActivity().findViewById(R.id.view_in_activity);
然后添加監聽器:
view.setOnClickListener(new OnClickListener() {
void onClick(View v) {
// Perform some action
}
})
在Fragment中這樣做..
public class Myfragment extends Fragment {
public interface Callback {
public void onButtonClicked(View radiobtn);
}
private Callback callback;
@Override
public void onAttach(Activity ac) {
super.onAttach(ac);
callback = (Callback) ac;
}
@Override
public void onDetach() {
callback = null;
super.onDetach();
}
radiobtn.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if (callback != null) {
callback.onButtonClicked(view);
}
}
});
}
在活動中這樣做......
public class Myfragment extends Activity implements MyFragment.Callback{
public void onButtonClicked(View btn) {
// The radiobutton in MyFragment has been clicked
myButton.setEnabled(true); // or something like this.
}
}
定義名為ClickListenerOnActivity
的接口包含名為onClickInActivity(View v)
並在片段中實現該方法。 單擊活動中的按鈕調用此方法的界面。
您可以查看此示例以了解如何實現接口。
盡管Emre Akturk的回答沒有錯,但這不是最好的做法,因此你可以將你的Fragment
附加到另一個Activity
,然后,該Activity
可能沒有那個View
。 所以,最好的方法是使用interface
。 讓Fragment
實現所需的接口,然后在Button
onClickListener
中,調用該Fragment
的接口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.