首页 文章

如何将单击事件从片段传递到Container活动?

提问于
浏览
0

我正在实现导航抽屉活动,其中我在导航抽屉中有一个片段(由回收者视图组成),以动态地将项目添加到导航抽屉 .

我已经成功实现了这个概念,但面对一个小问题,当我点击片段中的任何项目时导航抽屉不会关闭 . 这是因为我无法从片段访问DrawerLayout .

那么如何将片段中的单击侦听器传递给活动以关闭抽屉布局 .

谢谢 .

3 回答

  • 0

    这是一个简单的解决方案 . 创建一个界面

    public interface ClickInterface {
        public void buttonClicked();
    }
    

    然后在您的活动中,实现此接口

    public class MainActivity extends Activity implements ClickInterface{
    
       @override
       public void buttonClicked() {
          //do your code here
       }
    }
    

    现在从fragment类中调用此方法buttonclicked

    public class ChildFragment extends Fragment {
       ClickInterface interface;
    
       public void setInterface(ClickInterface interface) {
          this.interface = interface;
       }
    
       public void onClick(View v) {
          interface.buttonClicked();
       }
    }
    
  • 4

    要与片段中的活动进行通信,您可以使用该界面 .

    有关完整信息,请关注android开发人员的官方链接

    https://developer.android.com/training/basics/fragments/communicating.html

  • 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
    }
    

    此外,请确保在Activity中分别在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);
        }
    }
    

相关问题