我有一个非常独特的情况,在RecolyerView中有一个按钮,当点击(初始状态为“Register”)时,它以片段或活动的形式将一个意图传递给广播接收器,在那里它抛出一个警报对话框,有两个选项,是或否。如果选择“否”,则不会发生任何情况,对话框会关闭,但如果单击“是”,则会处理我在presenter类中定义的函数(与数据相关),并将按钮ui状态更新为“取消”。在另一种情况下,单击cancel将返回alert(警告),单击yes将切换ui文本到Register(注册)。
现在我已经实现了如下代码。(请注意,即使是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);
});
}
}
}
下面是我的活动中广播接收器中的相应代码:
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();
}
}
};
请注意:mEventListAdapter是我的适配器,我正在使用按钮UI代码,而meventRecolyerView是我正在片段中使用的回收器视图。
知道我错过了什么或者做错了什么吗?谢谢!
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);
}
}));
}
在调用NotifyDataSetChanged()
之前,是否基于对话框上用户选择的操作更新repo对象?看起来dorsvpeVentapicall()
方法不更新适配器可用项的列表,因此NotifyDataSetChanged()
没有任何效果。
我想改变颜色,想要一个更好的设计。。对此可以做些什么
这里是我的创建对话框代码, 是否可以用蓝色而不是红色显示Disclose?
最近我从支持库切换到com.google.android.Material:Material:1.0.0 但是现在我遇到了一个问题,在这个页面中有一个注释https://github.com/Material-Components/Material-Components-android/blob/master/docs/geting-started.md 注意:使用Material Compone
在更改屏幕之前,我试图向用户显示带有对话框的成功消息。我希望它等待用户单击ok按钮或按Enter键,然后更改屏幕。由于我必须在程序中放置大量对话框,为了避免重复,我尝试在MainClass中使用一个createDialog方法来创建对话框,并将其添加到我传递给该方法的阶段。但问题是,我希望它将屏幕更改为用户按下ok按钮后传递给它的屏幕,但dialog的结果函数是一个内部方法,它不访问我传递给函数的
我遇到了一个如何在对话框片段中更新片段的问题。 当我单击过滤器菜单按钮时,会显示一个新的对话框片段,其中包括一个无线电组。 我想在单击ok按钮时更新包含位置列表的片段。 它是PlaceActive的代码,其中包含PlaceFraank: 公共类PlaceActive扩展AppCompatActive{ } 以下是PlaceFragment类的代码: 公共类PlaceFragment扩展了片段{ }
我想从片段到活动使用返回按钮使用工具栏返回图标。 碎片是我的抽屉菜单项 我该怎么做?