0

我正在實現導航抽屜活動,其中我在導航抽屜中有一個片段(由回收站視圖組成),以便將項目動態添加到導航抽屜中。如何將片段中的點擊事件傳遞給Container活動?

我已經成功實現了這個概念,但面臨着一個小問題,當我點擊片段中的任何項目時,導航抽屜沒有關閉。這是因爲我無法從片段訪問DrawerLayout。

那麼如何將我的片段中的點擊偵聽器傳遞給關閉抽屜佈局的活動。

謝謝。

+0

在這裏發佈您的代碼 –

回答

2

這是一個簡單的解決方案來做到這一點。 您的活動創建一個接口

public interface ClickInterface { 
    public void buttonClicked(); 
} 

然後,實現這個接口

public class MainActivity extends Activity implements ClickInterface{ 

    @override 
    public void buttonClicked() { 
     //do your code here 
    } 
} 

現在調用此方法從片段類buttonclicked

public class ChildFragment extends Fragment { 
    ClickInterface interface; 

    public void setInterface(ClickInterface interface) { 
     this.interface = interface; 
    } 

    public void onClick(View v) { 
     interface.buttonClicked(); 
    } 
} 
+0

嗨。我試圖實現這個答案中提到的一個,但我得到一個NullPointer異常執行。 –

+0

你可以在這裏發佈logcat –

+0

你叫做setInterface的片段類的創建嗎? –

0

的這個官方鏈接,您可以使用EventBus

在的onClick()事件發佈和訂閱您的活動該事件。

//Inside your fragment post the event 
@Override 
public void onClick(View view) { 
    EventBus.getDefault().post(SomeEvent) 
} 

而且在您的活動訂閱該事件

@Subscribe 
public void onEvent(SomeEvent someEvent){ 
    //do what you want 
} 

此外,確保登記和的onCreate()和的onDestroy(註銷EventBus)分別在自己的活動。

@Override 
public void onCreate() { 
    //... 
    if (!EventBus.getDefault().isRegistered(this)) { 
    EventBus.getDefault().register(this); 
    } 
} 

@Override 
public void onDestroy() { 
    //... 
    if (EventBus.getDefault().isRegistered(this)) { 
     EventBus.getDefault().unregister(this); 
    } 
} 
相關問題