Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将单击事件从片段传递到容器活动?_Android_Android Studio_Android Fragments_Android Activity_Android Fragmentactivity - Fatal编程技术网

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

Android 如何将单击事件从片段传递到容器活动?,android,android-studio,android-fragments,android-activity,android-fragmentactivity,Android,Android Studio,Android Fragments,Android Activity,Android Fragmentactivity,我正在实现一个导航抽屉活动,其中导航抽屉中有一个由回收器组成的碎片视图,用于向导航抽屉动态添加项目 我已经成功地实现了这个概念,但是我面临一个小问题,当我点击片段中的任何项目时,导航抽屉都不会关闭。这是因为我无法从片段访问抽屉布局 那么,如何将片段中的单击侦听器传递给活动以关闭抽屉布局呢 谢谢。这里有一个简单的解决方案。 创建一个接口 public interface ClickInterface { public void buttonClicked(); } public clas

我正在实现一个导航抽屉活动,其中导航抽屉中有一个由回收器组成的碎片视图,用于向导航抽屉动态添加项目

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

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


谢谢。

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

public interface ClickInterface {
    public void buttonClicked();
}
public class MainActivity extends Activity implements ClickInterface{

   @override
   public void buttonClicked() {
      //do your code here
   }
}
然后在活动中实现此接口

public interface ClickInterface {
    public void buttonClicked();
}
public class MainActivity extends Activity implements ClickInterface{

   @override
   public void buttonClicked() {
      //do your code here
   }
}
现在调用这个方法buttonclicked from fragment类

public class ChildFragment extends Fragment {
   ClickInterface interface;

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

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

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

public interface ClickInterface {
    public void buttonClicked();
}
public class MainActivity extends Activity implements ClickInterface{

   @override
   public void buttonClicked() {
      //do your code here
   }
}
然后在活动中实现此接口

public interface ClickInterface {
    public void buttonClicked();
}
public class MainActivity extends Activity implements ClickInterface{

   @override
   public void buttonClicked() {
      //do your code here
   }
}
现在调用这个方法buttonclicked from fragment类

public class ChildFragment extends Fragment {
   ClickInterface interface;

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

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

要与来自片段的活动进行通信,可以使用接口

有关完整信息,请点击android开发者的官方链接


要与来自片段的活动进行通信,可以使用接口

有关完整信息,请点击android开发者的官方链接

你可以用

在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);
    }
}
你可以用

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

把你的密码贴在这里把你的密码贴在这里嗨。我试着实现了其中一个答案中提到的这一点,但在执行时出现了一个NullPointer异常。你能在oncreate of fragment类中发布你调用setInterface的logcat heredid吗?E/MessageQueue JNI:java.lang.NullPointerException:尝试调用接口方法'void com.example.sarthak.news.ItemClickListener.itemCLicked'com.example.sarthak.news.Frag$1.onClickFrag.java:61 com.example.sarthak.news.RecyclerTouchListener.onInterceptotouchVentrecyclerTouchListener.java:41上的空对象引用对是的。这边SetItemClickListener项目ClickListener;itemClickListener.itemCLicked;你好我试着实现了其中一个答案中提到的这一点,但在执行时出现了一个NullPointer异常。你能在oncreate of fragment类中发布你调用setInterface的logcat heredid吗?E/MessageQueue JNI:java.lang.NullPointerException:尝试调用接口方法'void com.example.sarthak.news.ItemClickListener.itemCLicked'com.example.sarthak.news.Frag$1.onClickFrag.java:61 com.example.sarthak.news.RecyclerTouchListener.onInterceptotouchVentrecyclerTouchListener.java:41上的空对象引用对是的。这边SetItemClickListener项目ClickListener;itemClickListener.itemCLicked;