如何将点击事件从片段传递到容器 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);
}
}
我正在实现一个导航抽屉 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 开发人员
的官方 linkhttps://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);
}
}