Skip to content
This repository was archived by the owner on Nov 23, 2022. It is now read-only.
Eugen Richter edited this page Apr 23, 2017 · 1 revision

Unter Android gibt es zwei Menü-Typen

  1. 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.

  2. 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).

Beispiel

@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);
}

Kontextmenü

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);
}

Links

Clone this wiki locally