Android-无法在单独的模块中使用org.greenrobot.eventbus



这里我正在编写一个自定义日历组件模块库。我的最终目标是将所选日期的回调信息从日历可用的模块库传递给主项目。

我试图在我的项目中单独的模块访问org.greenrobot.eventbus。但是要小于误差。当我在MainActivity活动中声明@Subscribe方法时,这被解决了。但是,我想从模块订阅,而不是从主项目。需要您的帮助来解决这个问题。

org.greenrobot.eventbus。订阅类com.sayantan. weekcalendar . mainactivity及其超类没有带有@Subscribe注释的公共方法

apply plugin: 'com.android.library'
android {
compileSdkVersion 31
buildToolsVersion "30.0.3"
defaultConfig {
minSdkVersion 22
targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'joda-time:joda-time:2.10.10'
implementation 'org.greenrobot:eventbus:3.2.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
}

weekcalendar .java放在模块文件中

public class WeekCalender extends LinearLayout {
/**
* Reference variables
**/
private Context mContext;
private OnDateClickListener mListener;
private List<DateTime> mDateTimeList;
public WeekCalender(Context context) {
super(context);
this.mContext = context;
initDays();
initViews(null);
}
public WeekCalender(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
initDays();
initViews(attrs);
}
public WeekCalender(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
initDays();
initViews(attrs);
}
private void initViews(AttributeSet attrs) {
if (attrs != null) {
//.....
}
NUM_OF_PAGES = calculateNoOfPage();
WeekPager weekPager = new WeekPager(getContext(), attrs);
addView(weekPager);
}
private void initDays() {
//....
//....
}
private int calculateNoOfPage() {
int noOfPage = 0;
//....
//....
return noOfPage;
}
/**
* This method is not getting triggered here, but, this is working find in main project activity class
*/
@Subscribe
public void onDateClicked(Event.CalenderEvent event) {
Toast.makeText(mContext, event.getSelectedDate().toLocalDate().toString(), Toast.LENGTH_SHORT).show();
if (mListener != null)
mListener.onDateClick(event.getCurrentDate());
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (!EventBus.getDefault().isRegistered(mContext)) {
EventBus.getDefault().register(mContext);
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (EventBus.getDefault().isRegistered(mContext)) {
EventBus.getDefault().unregister(mContext);
}
}
public void setSelectedDate(DateTime selectedDate) {
EventBus.getDefault().post(new Event.SetSelectedDateEvent(selectedDate));
}
public void setOnDateClickListener(OnDateClickListener listener) {
this.mListener = listener;
}
}

请注意:事件从viewpager片段张贴在这个模块内。

DaysAdapter——

// Event handler
root.setOnClickListener(v -> {
// change text color
DateListUtils.setSelectedDate(item);
EventBus.getDefault().post(new Event.CalenderEvent(dateTime, item));
setColor(item);
});

请替换以下代码。目前,您在mContext对象上注册,它不包含任何订阅者,那么您需要交付事件WeekCalendar的实例。

@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}

@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}

相关内容

最新更新