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); 
    } 
} 
相关问题