我正在實現導航抽屜活動,其中我在導航抽屜中有一個片段(由回收站視圖組成),以便將項目動態添加到導航抽屜中。如何將片段中的點擊事件傳遞給Container活動?
我已經成功實現了這個概念,但面臨着一個小問題,當我點擊片段中的任何項目時,導航抽屜沒有關閉。這是因爲我無法從片段訪問DrawerLayout。
那麼如何將我的片段中的點擊偵聽器傳遞給關閉抽屜佈局的活動。
謝謝。
我正在實現導航抽屜活動,其中我在導航抽屜中有一個片段(由回收站視圖組成),以便將項目動態添加到導航抽屜中。如何將片段中的點擊事件傳遞給Container活動?
我已經成功實現了這個概念,但面臨着一個小問題,當我點擊片段中的任何項目時,導航抽屜沒有關閉。這是因爲我無法從片段訪問DrawerLayout。
那麼如何將我的片段中的點擊偵聽器傳遞給關閉抽屜佈局的活動。
謝謝。
這是一個簡單的解決方案來做到這一點。 您的活動創建一個接口
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();
}
}
嗨。我試圖實現這個答案中提到的一個,但我得到一個NullPointer異常執行。 –
你可以在這裏發佈logcat –
你叫做setInterface的片段類的創建嗎? –
從您可以使用片段與活動溝通界面。
有關完整信息,請遵循Android開發者
https://developer.android.com/training/basics/fragments/communicating.html
的這個官方鏈接,您可以使用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);
}
}
在這裏發佈您的代碼 –