-
Notifications
You must be signed in to change notification settings - Fork 6
Menü
-
Kontext-Menü: Dieses wird jedes Mal direkt vor dem Anzeigen erzeugt. Dadurch ist es möglich, abhängig von dem geklickten Element, ein anderes Kontext-Menü zu erzeugen. Angezeigt wird dieses als scrollbare Liste von Einträgen. Kontext-Menü unterstützt keine Bilder.
-
Ab Android 3.0 wird das Options-Menü durch eine Action-Bar erstetzt. Diese ist immer sichtbar und ist als eine Leiste (oben oder unten) sichtbar. Jeden Menüeintrag kann vorgegeben werden, ob dieser immer, nur wenn Platz oder gar nicht angezeigt wird. Alle nicht angezeigten Menüeinträge erscheinen erst, wenn man auf der linken Seite auf 3 vertikale Punkte klickt (oder bei Geräten mit Menü-Taste, auf diese).
Das Einbinden eines Optionsmenüs erfolgt über das Überschreiben der Methode onCreateOptionsMenu(Menu menu). Die Auswertung des gewählten Eintrags erfolgt über die überschriebene Methode der Activity onOptionsItemSelected(MenuItem item).
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.opt_list) {
Intent listIntent = new Intent(this, RecordListActivity.class);
this.startActivity(listIntent);
}
return super.onOptionsItemSelected(item);
}Das Kontextmenü wird in der folgenden Methode initialisiert. Das Menü selbst wird, wie auch das Optionsmenü, über XML definiert, und kann für beide Menü-Möglichkeiten verwendet werden.
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.context_menu, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}Zur Laufzeit müssen alle Elemente registrier werden, die Kontext-Menü unterstützen sollten. Am besten erledigt man die Registrierung in onResume und die Deregistrierung in onPause Methoden.
registerForContextMenu(findViewById(android.R.id.list));In unserem Fall ist es die Liste. Bei Auswerten des Kontextmenüs benötigen wir noch Information, welcher der Listenelemente das Kontextmenü ausgelöst hat. Das erfolgt über die Abfrage des Adapters (wir benötigen hier die ID des DB-Datensatzes).
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
long id = info.id;
_Position = info.position;
switch (item.getItemId()) {
case R.id.ctx_delete:
DBHelper dbHelper = new DBHelper(this);
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete(
TimeTrackingTable.TABLE_NAME,
TimeTrackingTable.ID + "=?",
new String[]{String.valueOf(id)});
db.close();
LoadData();
break;
case R.id.ctx_edit:
Intent intentEdit = new Intent(this, EditRecord.class);
intentEdit.putExtra("id", id);
startActivity(intentEdit);
break;
default:
break;
}
return super.onContextItemSelected(item);
}Die Dokumentation unterliegen der 
Der Quellcode unterliegt der 
