一、问题导入
目前实现一个功能,点击确认按钮跳转到下一个界面添加数据,添加成功后返回后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;