Submenu erstellen

F

Fabs44

Ambitioniertes Mitglied
1
Hallo Zusammen!

In meiner Hello World App war von Anfang an ein Submenu.

Jetzt soll man über dieses menu das Impressum aufrufen können.

Der Code meines Impressum Menüs:
HTML:
 <item     
        android:id="@+id/impressum"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Impressum"/>
Hier funktioniert alles, wie ich es mir vorstelle.
Wenn ich auf den Menu Button klicke, dann öffnet sich das Submenu, indem Impressum steht.

Jetzt soll aber beim klicken auf Impressum sich eine TextView Activity öffnen, in der das Impressum steht.

Also habe ich eine Neue Activity Namens Impressum erstellt und habe in diese Activity das richtige geschrieben.

Dann habe ich zur Impressum Activity eine Id hinzugefügt:
HTML:
android:id="@id/impressum"

Doch Eclipse will diese Id nicht annehmen.
Was habe ich falsch gemacht?

Vielen Dank im voraus!

LG Fabi :)
 
Eventuell rede ich jetzt an dir vorbei aber, warum fügst du deiner Activity eine ID zu?
Bzw wo? In der Layout-xml, sieht zu mindestens so aus.

Normalerweise fügst du deinem Menü die Einträge hinzu und über Listener + Switch guckst du dann was gedrückt wurde. Dann musst du doch nur noch die Acticity mit dem "Impressum-Case" starten.

Oder was hast du vor? :D
 
  • Danke
Reaktionen: Fabs44
Hi

Die ID ist in der XML Datei.

Ich will dass wenn man auf den Menü Button klickt, dass sich dann ein Submenü öffnet.
In diesem Submenü steht Impressum
Soweit ist es schon programmiert :)

Und jetzt soll sich eine Activity öffnen, wenn ich auf Impressum klicke.

Wie mache ich das genau?

Ist das nicht so zu lösen wie vorgeschlagen:)

LG Fabi :)
 
Dann lag ich ja nicht ganz so sehr daneben :D

Wie gesagt, du muss jetzt nur noch einen Listener hinzufügen, der dann mit einem Switch guckt welche ID er bekommt (welcher Eintrag im Menü ausgewählt wurde).
Und wenn als ID "Impressum" kommt, soll er deine zweite Activity starten.

Da ich die Doku von Google mag: http://developer.android.com/guide/topics/ui/menus.html ;)

Unter -- Handling Click events ---
Hoffe mal das war das was du brauchst
 
  • Danke
Reaktionen: Fabs44
Hi

Muss ich dann nur einmal für Menü Buttons (also Impressum, Disclaimer etc.) diesen Code einfügen?

// This activity implements OnMenuItemClickListener
popup.setOnMenuItemClickListener(this);
popup.inflate(R.menu.actions);
popup.show();

LG Fabi :)
 
Du fügst deiner Activity einfach folgenden Code ein

Code:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
* * // Handle item selection
* * switch (item.getItemId()) {
* * * * case R.id.new_game:
* * * * * * newGame();
* * * * * * return true;
* * * * case R.id.help:
* * * * * * showHelp();
* * * * * * return true;
* * * * default:
* * * * * * return super.onOptionsItemSelected(item);
* * }
}

Und statt "case R.id.new_game:" schreibst du dann R.id.impressum.
Bei weiteren Einträgen dann jeweils einen weiteren Case.

Dürfte so funktionieren, hab das Menü nur einmal nutzen müssen. Bin mir deshalb nicht mehr 100%ig sicher ;)
 
  • Danke
Reaktionen: Fabs44
Hi

Ich habe einfach das Impressum Id Zeug in der Impressum.java zu einer anderen Override hinzugefügt.

Jetzt sieht es so aus:
HTML:
@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
		   return true;
		}
		int id1 = item.getItemId();
		if (id1 == R.id.impressum) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
Funktioniert das so?

LG Fabi :)
 
Zuletzt bearbeitet:
Ich glaub ich verstehe jetzt dein Problem ;)

Es hapert ja schon bei "zu einer anderen Override hinzugefügt", nimm das jetzt nicht zu persönlich, aber das Forum ist nicht dazu da dir den Code zu geben damit du ihn nur noch Copy-Pasten musst. Es geht eher darum das man lernt den Code selbst zu schreiben und das Programmieren an sich lernt.
An deinen anderen Posts sieht man ja das du noch ein "Anfänger" bist, aber ein Großteil deiner Probleme kann man durch googeln sehr gut lösen. Jeder hat so angefangen, und auch viele andere googeln ihre Probleme wenn etwas nicht geht oder sie nicht wissen wie sie zu ihrem Ziel kommen.

Aber bei so Sachen wie einem Menü (was in der Android-Doku sehr genau beschrieben ist wenn man Englisch kann) ist es dann fast schon traurig.

Jetzt aber wieder zum Thema:

https://www.youtube.com/watch?v=IcM2dlXxH-Y
(ein gutes deutsches Tutorial zum Menü und einer Erklärung)

Google
einfach gegoogelt

Vogella
Vogella hat sehr gut erklärte Tutorials (auf Englisch)

Ich denke mal Google und diverse Tutorials helfen besser als den Code nur zu kopieren und sich dann über das Ergebnis zu freuen ;)
Und wenn es dann noch Probleme gibt und man genug Code/Details und bei Fehlern den Logcat mitliefert helfen einem auch gerne die User

In dem Sinne, auf gut gelingen :rolleyes2:
 
  • Danke
Reaktionen: Fabs44
Hi

Ich habe mir das Video Tutorial angeschaut und habe das Menü fertig gestellt.

Jetzt treten im Text view der Activity des Impressums unerwartete Fehler auf.
HTML:
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=@string/hello_world >

</RelativeLayout>

Es werden diese zwei Fehler angezeigt:

- Description Resource Path Location Type
error: Error parsing XML: junk after document element h activity_impressum.xml/Android AAPT Problem

- Description Resource Path Location Type
The markup in the document following the root element must be well-formed. activity_impressum.xml/Android XML Format Problem

Beide Errors treten in dieser Zeile auf (<TextView).

Was ist hier falsch?
An dieser Stelle gab es noch nie Errors.

Vielen Dank für alle Eure Antworten!
Danke im Voraus!

LG Fabi:smile:
 
Zwei Flüchtigkeitsfehler:

- <TextView ....... />. Du musst so ziemlich jedes Layout-Element mit einem "/>" wieder schließen (Lineare- und Relativelayouts, ScrollViews u.ä. ausgeschlossen)

- android:text = "@string/hello_world" , da erwartet Eclipse von dir das du den Syntax für XML einhältst, wie bei allen anderen "Atributen"/Beschreibungen für dein Layout-Element.

Ist wohl deine erste Programmiersprache, aber immerhin bleibst du dran ;) :thumbsup:
 
  • Danke
Reaktionen: Fabs44
Hi

Ich habe den WebView jetzt richtig geschlossen, aber der Fehler wird immernoch angezeigt.

Kann man den TextView auch so ausdrücken:
HTML:
android:text="Impressum"

LG Fabi :)
 
Du kannst es ja mal austesten, Eclipse wird dir das dann gelb anstreichen und auf die strings.xml verweisen.
Hat den Hintergrund das man mehrere Sprachen leicht einbauen kann. Wenn du alle Strings in der strings.xml speicherst, kannst du diese strings.xml einfach übersetzten und in einen entsprechenden Ordner kopieren. Das System sieht dann, hey die App kann Englisch und ich bin ein "Englisches"-Android, dann nehme ich sofort die englische strings.xml.
Wenns dich Interessiert: Android Building Multi-Language Supported App

Aber so zum testen kannst du den Text natürlich auch so reinschreiben ;)
 
  • Danke
Reaktionen: Fabs44
Hi

Hast du eine Idee, wie ich die zwei Errors beheben kann?
Kennst du einen Trick zum aktualisieren der Errors?

LG Fabi :)
 
Die habe ich auch manchmal, obwohl sie behoben wurde.

Entweder schließst du die xml und gehst bei Eclipse unter Project > Clean. Nachdem das durch ist das Projekt nochmal erstellen bzw starten damit die R.java und anderen Javadocs generiert werden. Dann sollte er auch die Fehlermeldungen der xml löschen.

Falls nicht, einmal Eclipse neu starten.
 
  • Danke
Reaktionen: Fabs44
Ich habe alle Deine Tipps befolgt doch die Errors sind immernoch da :(

Ist hier vielleicht ein anderer Fehler:
HTML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.devname.appname.Impressum"
    /> 

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>
 
Dein TextView möchte vielleicht eine ID zugewiesen bekommen? :D
Das machst du mit "android:id= "@+id/textView1""
Aber das macht Eclipse ja normalerweise von selbst, wenn du im grafischem Layout deine Elemente hinzufügst.
 
  • Danke
Reaktionen: Fabs44
Ich gehe hier noch mal auf die ursprüngliche Frage ein. Der Eintrag

Code:
android:id="@id/impressum"
ist falsch. Statt @id muss dort @+id stehen.
Code:
android:id="@+id/impressum"
Layouts | Android Developers

Wenn in den XML-Dateien ein Fehler ist, kann Eclipse in den meisten Fällen keine neue R Klasse generieren. Da dürfte auch Project>Clean nicht helfen.
 
  • Danke
Reaktionen: Fabs44 und joshua1996
Im nachhinein ist es mir auch aufgefallen :D
Mit dem Cleanen ging es mir aber darum das die (eventuell) falsch angezeigten Fehler dann verschwinden.

Aber gut das sich hier auch ein paar richtige Profis rumtreiben ;)
 
  • Danke
Reaktionen: Fabs44
Hi

Die zwei Fehler lagen daran, dass die <RelativeLayout nur mit einem ">" geschlossen wird und an einem Fehlenden "+" in der Android Id.

Die Errors sind behoben, doch das Menü funktioniert nicht.

Der Menü Button Impressum ist eingetrage und wird als Id verzeichnet.
Aber wenn ich auf den Impressum Button klicke, dan sieht man nicht die Impressums Activity.

Java Datei:
HTML:
package com.devname.appname;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;
  
public class MainActivity extends Activity {
 
    private  WebView webview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_appname_home);

        webview = (WebView)findViewById (R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl("http://URL.de/");
        
        webview.setWebViewClient(new WebViewClient() { 
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){return false;}
    });
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.appname_home, menu);
        return true;
    }
    
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        
    	// Handle action bar item clicks here. The action bar will
    	// automatically handle clicks  on the Home/Up button, so long
    	// as you specify a parent activity in AndroidManifest.xml.
    	int id = item.getItemId();
    	if (id == R.id.action_settings) {
    		return true;
    	}
        if (id == R.id.impressum) {
    	    return true;
        }
    	return super.onOptionsItemSelected(item);
    	}
    }

Muss vielleicht noch etwas importiert werden?

Danke im Voraus!

LG Fabi :)
 
Die App wurde ja auch nicht angewiesen etwas zu tun...
Wenn die ID Impressum lautet, returnst du den boolean "true" und er springt aus der if-Abfrage .
Du musst der App sagen das sie vor dem "return true;" eine neue Activity startet.
Google einfach mal wie man eine neue Activity startet. Das Stichwort dabei ist "Intent" ;)
 
  • Danke
Reaktionen: Fabs44

Ähnliche Themen

5
Antworten
0
Aufrufe
1.140
586920
5
R
Antworten
6
Aufrufe
994
swa00
swa00
W
Antworten
2
Aufrufe
739
rene3006
R
Zurück
Oben Unten