如何将点击事件从片段传递到容器 activity?

How to pass a click event from fragment to Container activity?

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

我已经成功地实现了这个概念,但是我遇到了一个小问题,即当我点击 fragment 中的任何项目时,导航抽屉没有关闭。这是因为我无法从 fragment 访问 DrawerLayout。

那么如何将点击侦听器从我的片段传递到 activity 以关闭抽屉布局。

谢谢。

这是一个简单的解决方案。 创建接口

public interface ClickInterface {
    public void buttonClicked();
}

然后在你的activity中实现这个接口

public class MainActivity extends Activity implements ClickInterface{

   @override
   public void buttonClicked() {
      //do your code here
   }
onCreate() {
       fragment.setInterface(this);
    }

现在从片段中调用此方法 buttonclicked class

public class ChildFragment extends Fragment {
   ClickInterface interface;

   
   //call this method from activity when activity loads the fragment inside it
   public void setInterface(ClickInterface interface) {
      this.interface = interface;
   }

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

要从片段与 activity 通信,您可以使用该接口。

有关完整信息,请关注 android 开发人员

的官方 link

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

您可以使用EventBus

在 onClick() 中,post 一个事件并在您的 activity 中订阅该事件。

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

并在您的 activity 中订阅该活动

@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);
    }
}