Ang*_*ely 5 java android broadcastreceiver recycler-adapter android-recyclerview
我有一个非常独特的情况,我在recyclerview中有一个按钮,单击该按钮(初始状态为“ register”)后,会将其意图传递给片段或活动中的广播接收器,并在其中引发警报对话框,带有2个选项,是的或者没有。如果选择否,则什么也不会发生,并且对话框会消失,但是如果单击是,它将处理我在我的演示者类中定义的函数(与数据有关),并且应该将我的按钮ui状态更新为“取消”。其他方法也一样,单击“取消”将返回警报,单击“是”将切换ui文本进行注册。
现在我已经实现了如下代码(请注意,即使notifydatasetchanged对我也不起作用)。知道我做错了什么以及如何实现吗?我public void onBind(int position)的适配器功能代码:
if (repo.getIsRsvpAvailable().equals("true")) {
rsvpButton.setVisibility(View.VISIBLE);
for (int i = 0; i < mAllRSVPEventsList.size(); i++) {
if (mAllRSVPEventsList.get(i).getEvent().getEventId().equals(repo.getEventId()) && mAllRSVPEventsList.get(i).getIsAttending()) {
rsvpButton.setText("CANCEL");
rsvpButton.setOnClickListener(v -> {
Intent in = new Intent("main_rsvp_button_clicked");
in.putExtra("main_rsvp_event_id", repo.getEventId());
in.putExtra("main_rsvp_is_attending", "false");
in.putExtra("main_rsvp_item_position", position);
rsvpButton.getContext().sendBroadcast(in);
});
break;
} else {
rsvpButton.setText("RSVP");
rsvpButton.setOnClickListener(v -> {
Intent in = new Intent("main_rsvp_button_clicked");
in.putExtra("main_rsvp_event_id", repo.getEventId());
in.putExtra("main_rsvp_is_attending", "true");
in.putExtra("main_rsvp_item_position", position);
rsvpButton.getContext().sendBroadcast(in);
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的活动中广播接收器中的相应代码:
private BroadcastReceiver mEventIdReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
String eventId = intent.getStringExtra(EVENTID_MAIN_EXTRA_TITLE);
String isAttending = intent.getStringExtra(EVENTID_MAIN_IS_ATTENDING);
int itemPosition = intent.getIntExtra(EVENTID_MAIN_RSVP_ITEM_POSITION, 0);
if (isAttending.equals("true")) {
showDialog(R.string.rsvp_title, R.string.confirm_rsvp_body, R.string.yes,
(dialog, which) -> {
mPresenter.onRSVPClick(eventId, isAttending);
mEventListAdapter.notifyDataSetChanged();
mEventRecyclerView.removeAllViews();
mEventRecyclerView.scrollToPosition(itemPosition);
}, R.string.no, null, null);
} else {
showDialog(R.string.rsvp_title, R.string.confirm_cancel_body, R.string.yes,
(dialog, which) -> {
mPresenter.onRSVPClick(eventId, isAttending);
mEventListAdapter.notifyDataSetChanged();
mEventRecyclerView.removeAllViews();
mEventRecyclerView.scrollToPosition(itemPosition);
}, R.string.no, null, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
Run Code Online (Sandbox Code Playgroud)
请注意:mEventListAdapter是我的适配器,我正在使用按钮UI代码,而mEventRecyclerView是我在片段中使用的回收器视图。
知道我错过了什么或做错了什么吗?谢谢!
RSVPClick方法:
@Override
public void onRSVPClick(String eventId, String isAttending) {
getMvpView().showLoading();
getCompositeDisposable().add(getDataManager()
.doRSVPEventApiCall(
eventId,
getDataManager().getFirstName(),
getDataManager().getLastName(),
getDataManager().getCurrentUserEmail(),
isAttending
)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(response -> {
if (!isViewAttached()) {
return;
}
getMvpView().hideLoading();
}, throwable -> {
if (!isViewAttached()) {
return;
}
getMvpView().hideLoading();
if (throwable instanceof ANError) {
ANError anError = (ANError) throwable;
handleApiError(anError);
}
}));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |