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;