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

时间:2017-06-15 17:04:18

标签: android android-studio android-fragments android-activity android-fragmentactivity

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

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

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

谢谢。

3 个答案:

答案 0 :(得分:4)

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

public interface ClickInterface {
    public void buttonClicked();
}

然后在您的活动中,实现此界面

public class MainActivity extends Activity implements ClickInterface{

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

现在从片段类

中调用此方法buttonLlicked
public class ChildFragment extends Fragment {
   ClickInterface interface;

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

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

答案 1 :(得分:0)

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

有关完整信息,请点击android developer

的官方链接

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

答案 2 :(得分: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);
    }
}