};
// The dialog hosting the popup list view.
- private AlertDialog mListBoxPopup = null;
-
+ private final AlertDialog mListBoxPopup;
private final ContentViewCore mContentViewCore;
private final Context mContext;
+ private boolean mSelectionNotified;
+
public SelectPopupDialog(ContentViewCore contentViewCore, List<SelectPopupItem> items,
boolean multiple, int[] selected) {
mContentViewCore = contentViewCore;
b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- mContentViewCore.selectPopupMenuItems(getSelectedIndices(listView));
+ notifySelection(getSelectedIndices(listView));
}
});
b.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- mContentViewCore.selectPopupMenuItems(null);
+ notifySelection(null);
}
});
}
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
- mContentViewCore.selectPopupMenuItems(getSelectedIndices(listView));
+ notifySelection(getSelectedIndices(listView));
mListBoxPopup.dismiss();
}
});
mListBoxPopup.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
- mContentViewCore.selectPopupMenuItems(null);
+ notifySelection(null);
}
});
}
return resourceId;
}
- private int[] getSelectedIndices(ListView listView) {
+ private static int[] getSelectedIndices(ListView listView) {
SparseBooleanArray sparseArray = listView.getCheckedItemPositions();
int selectedCount = 0;
for (int i = 0; i < sparseArray.size(); ++i) {
return indices;
}
+ private void notifySelection(int[] indicies) {
+ if (mSelectionNotified) return;
+ mContentViewCore.selectPopupMenuItems(indicies);
+ mSelectionNotified = true;
+ }
+
@Override
public void show() {
mListBoxPopup.show();
@Override
public void hide() {
mListBoxPopup.cancel();
+ notifySelection(null);
}
}