一、问题导入
目前实现一个功能,点击确认按钮跳转到下一个界面添加数据,添加成功后返回后AlertDialog自动取消了,现在想让dialog不要取消,这个需求查了很多别的博客也分析了源码。。。
下面是刚开始写的代码,点击确认按钮自动会取消这个dialog:
AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
builder.setTitle("设置链接方式");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (view instanceof TextView) {
if (obj[position + 1].id == value.id) {
((TextView) view).setTextColor(0xff333333);
} else {
((TextView) view).setTextColor(0xff666666);
}
}
return view;
}
};
adapter.addAll(items);
builder.setAdapter(adapter, (dialog, which) -> {
Observable.just(obj[which + 1])
.subscribeOn(Schedulers.io())
.subscribe(http -> {
http.upTime = System.currentTimeMillis();
MyApp.getBaseDatabase().ProxyHttpDao().update(http);
});
});
builder.setPositiveButton("添加", (dialog, which) -> {
startActivity(new Intent(getBaseContext(), AddProxy.class));
});
builder.setNegativeButton("取消", (dialog, which) -> {
});
builder.create().show();
二、分析
先去点击确认按钮方法即AlertDialog.Builder 的 setPositiveButton 方法去分析:
/**
* Set a listener to be invoked when the positive button of the dialog is pressed.
* @param text The text to display in the positive button
* @param listener The {@link DialogInterface.OnClickListener} to use.
*
* @return This Builder object to allow for chaining of calls to set methods
*/
public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {
P.mPositiveButtonText = text;
P.mPositiveButtonListener = listener;
return this;
}
发现监听是一个P的方法,这个P就是
private final AlertController.AlertParams P;
public s

本文探讨了一个问题,即如何在Android中使AlertDialog在点击确认按钮后不自动关闭。作者通过分析源码发现,问题出在`setPositiveButton`方法中的`ButtonHandler`,该Handler在接收到消息时会关闭dialog。为了解决这个问题,作者提出了修改后的代码,通过设置自定义的监听器并在`dialog.show()`之前调用来阻止dialog被关闭。
最低0.47元/天 解锁文章
712

被折叠的 条评论
为什么被折叠?



