06/2012 - KaffeeKlatsch
06/2012 - KaffeeKlatsch
06/2012 - KaffeeKlatsch
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
}<br />
}<br />
CheckedImageNoteView view;<br />
if (convertView != null) {<br />
view = (CheckedImageNoteView) convertView;<br />
view.setChecked(isSelected(position));<br />
} else {<br />
view =<br />
(CheckedImageNoteView) mLayoutInflater.inflate(<br />
R.layout.checked_image_note, parent, false<br />
);<br />
view.initializeListeners(<br />
mCheckBoxListener, mOnClickListener,<br />
mOnLongClickListener<br />
);<br />
}<br />
view.populate(position, mImageNotes[position]);<br />
return view;<br />
public ImageNote getImageNote(<br />
CheckedImageNoteView view<br />
) {<br />
return mImageNotes[view.getIndex()];<br />
}<br />
public void changeSelectionState(<br />
CheckedImageNoteView view<br />
) {<br />
boolean selected = !isSelected(view);<br />
view.setChecked(selected);<br />
if (selected) {<br />
mSelected.add(Long.valueOf(view.getIndex()));<br />
} else {<br />
mSelected.remove(Long.valueOf(view.getIndex()));<br />
}<br />
mOnSelectionChangedListener.onSelectionChanged(<br />
view, selected, mSelected.size()<br />
);<br />
}<br />
public boolean isSelected(CheckedImageNoteView view) {<br />
return mSelected.contains(<br />
Long.valueOf(view.getIndex())<br />
);<br />
}<br />
private boolean isSelected(long index) {<br />
return mSelected.contains(Long.valueOf(index));<br />
}<br />
public int getSelectedCount() {<br />
return mSelected.size();<br />
}<br />
public void resetSelection() {<br />
mSelected.clear();<br />
notifyDataSetChanged();<br />
}<br />
public interface OnSelectionChangedListener {<br />
void onSelectionChanged(<br />
CheckedImageNoteView view, boolean selected,<br />
int selectedCount<br />
);<br />
}<br />
(Einheits-)Gewänder für den Androiden<br />
Damit sind die nötigen Arbeiten zur Darstellung der<br />
Liste abgeschlossen. Es folgt die Implementierung der<br />
Benutzerinteraktion. Dazu werden die benötigten Listener<br />
in der ImageNotesActivity erzeugt. Für das Aufrufen<br />
der Detailansicht einer Bildnotiz wird ein einfacher<br />
OnClickListener erzeugt, der beim Klicken auf ein<br />
Listenelement aktiv wird. Wenn der Selektionsmodus<br />
aktiv ist, soll anstelle des Aufrufs der Detailansicht der<br />
Selektionszustand des Elements geändert werden. Zum<br />
Starten des Selektionsmodus existieren zwei weitere Listener,<br />
die bei einem langen Klick auf ein Listenelement<br />
oder bei der Aktivierung einer Checkbox zum Einsatz<br />
kommen. Diese versuchen zuerst den Contextual Action<br />
Mode zu starten und informieren dann den Adapter über<br />
die Änderung ihres Selektionszustands.<br />
private final OnClickListener mOnClickListener =<br />
new OnClickListener() {<br />
@Override<br />
public void onClick(View view) {<br />
if (mActionMode == null) {<br />
Intent intent =<br />
new Intent(this, ImageNoteActivity.class);<br />
intent.putExtra(<br />
ImageNoteActivity.IMAGE_NOTE_ID,<br />
((CheckedImageNoteView) view).getIndex()<br />
);<br />
startActivity(intent);<br />
} else {<br />
mImageNotesAdapter.changeSelectionState(<br />
(CheckedImageNoteView) view<br />
);<br />
}<br />
}<br />
};<br />
private final OnClickListener mCheckBoxListener =<br />
new OnClickListener() {<br />
@Override<br />
public void onClick(View view) {<br />
tryInvokeCab();<br />
mImageNotesAdapter.changeSelectionState(<br />
(CheckedImageNoteView) view.getParent()<br />
);<br />
}<br />
};<br />
private final OnLongClickListener mOnLongClickListener =<br />
new OnLongClickListener() {<br />
@Override<br />
public boolean onLongClick(View view) {<br />
tryInvokeCab();<br />
mImageNotesAdapter.changeSelectionState(<br />
(CheckedImageNoteView) view<br />
);<br />
return true;<br />
}<br />
};<br />
Seite 14 <strong>KaffeeKlatsch</strong> Jahrgang 5 / Nr. 6 / Juni <strong>2012</strong>