onClick neue Activity öffnen

  • Servus stehe mal wieder vor einem nervigen Problem. Ich hab in meiner MainActivity einen FragmentPagerAdapter mit 4 Seiten.


    Nun will ich die Buttons die ich auf den verschiedenen Fragments eingebaut hab mit einem onClickListener versehen, wenn man dann drauf klickt soll eine andere Activity geöffnet werden.


    hier mal meine MainActivity(entschuldigt den langen Code aber das schliesst evtl Fragen schon mal aus)


    hier mal ein screenshot von einer Section(Fragement) auf der man unten den Button sieht


    [Blockierte Grafik: http://my.funpic.de/show-photo/801761-PIC.png]



    ich weiss eigentlich gar nicht wo ich nun anfangen soll, wo genau muss ich die "R.id.btnFüllungen" in eine Variabel machen? wo muss ich das neue Intent machen? muss ich eine "...java" datei starten und in dieser dann wieder eine "...xml" datei?

  • Zitat


    ich weiss eigentlich gar nicht wo ich nun anfangen soll, wo genau muss ich die "R.id.btnFüllungen" in eine Variabel machen? wo muss ich das neue Intent machen? muss ich eine "...java" datei starten und in dieser dann wieder eine "...xml" datei?


    Naja schau Dir doch mal den Lifecycle von einem Fragment an. Dort gibt es einmal oncreate und


    onCreateView



    -> dort wird ja meist das Layout des Views initalisiert



    View view = inflater.inflate(R.layout.fragment_startseite, container, false);


    und danach kannst du auch auf deine Views im Layout zugreifen



    button1 = (Button) view.findViewById(R.id.button1);


    Tja und hier kannst du auch deinen Clicklistner einbauen. Entweder baust du für jeden Button einen oder
    dein gesamtes Fragment erbt einen Clicklistner


    Java
    public class Fragment_Startseite extends Fragment implements OnClickListener


    jetzt musst du nur noch die enbtsprechende Methode einbauen


    Code
    @Override
    	public void onClick(View v) {
    		 
    		Log.d("KAN", "Test " + v.getId());
    		
    	}


    getId gibt Dir die R.id.... des jeweiligen Buttons zurück -> also einfach case/switch oder if/else Abfrage einbauen und fertig.
    Da würdest du deinen ActivityStartcode einbauen
    zbsp.


    Code
    if (v.getId() == R.id.button1){
          // Starte neue Activity
    }


    Bei mehreren Views/Button ist if/else sicherlich nicht die schönste Lösung switch/case ist da lesbarer.


    Wichtig, den Button noch an den OnCLickListner attachen


    Code
    button1  = (Button) view.findViewById(R.id.button1);
    button1.setOnClickListener(this);
  • so ich hab n kleines Problem ...


    • ich hab eine neue XML datei gemacht "add_fuel.xml"
    • danach hab ich eine JAVA datei gemacht "AddFuel.java" mit folgendem Inhalt


    • als nächstes hab ich die MainActivity folgendermaßen erweitert


    nun schmeisst mir das doofe Programm in der Zeile mit dem Intent einen Fehler das der Konstruktor für Intent nicht definiert ist.
    :-! :-! :-! :-!



    • in der Manifest hab ich noch eine Activity kopiert und abgeändert
    Code
    <activity
            	android:name="com.example.carmanager.ADDFUEL"
            	android:label="@string/app_name" >
            	<intent-filter>
                	<action android:name="android.intent.action.ADDFUEL" />
                	<category android:name="android.intent.category.DEFAULT" />
            	</intent-filter>
        	</activity>


    HELP ! :-X

  • Hnmm sein Fragment mit Activity zu bezeichnen verwirrt etwas.
    (weil Fragmente und Activities 2Paar Schuhe sind)



    Umm ein Intent aus einem Fragment zu senden (das willst du gerade musst du den Context richtig holen


    Code
    Intent intent = new Intent(getActivity() ,  AddFuel.class);
    		startActivity(intent);
  • Zitat

    anfänger hald


    Naja der Intentaufruf wäre ja aus einer Activity richtig.


    Jetzt lass mal deinen Code 2 Monate liegen und dann schaust du wieder rein, dann stolperst du garantiert wieder drüber.


    Ich versuche die Dinge immer mit in den Namen zu packen


    Frag_Section1 = Fragment Section1


    Act_Main = Activity Main
    Act_Fuel



    tv_benzin = TextView
    iv_ = ImageView



    so kannst du relativ schnell erfassen um was es geht. :)

  • hier nochmal die komplette Manifest, sry ich hatte bis jetzt keine Zeit mehr an mein Projekt zu sitzen...

  • KillPhil du bist einfach genial! du sagst du willst meine Manifest sehen und tatsächlich da lag der Fehler... und zwar genau hier

    Code
    <activity
            	android:name="com.example.carmanager.AddFuel"
            	android:label="@string/app_name" >
            	<intent-filter>
                	<action android:name="com.example.carmanager.ADDFUEL" />
                	<category android:name="android.intent.category.DEFAULT" />
            	</intent-filter>
        	</activity>


    bei <action android:name="android.intent.action.ADDFUEL" />


    kannst du mir vllt den unterschied erklären ? ich kapier das nicht, ich dachte der action name ist der name auf den die activity wartet. sie legt sozusagen los wenn er gerufen wird, ist es dann nicht egal wie man ihn betitelt?

  • Ich dachte immer


    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />


    definieren lediglich deine StartActivity, und dann hattest du noch ein Gross/Kleinschreibungsproblem


    http://developer.android.com/r…droid/content/Intent.html


    Das Action-Dingens brauchst du halt nur wenn du Intents feuerst, welche dann direkt bei der Activity rauskommen sollen.
    Sprich das ist nicht bei jeder Activity notwendig.

  • servus hab 2 video tutorials gemacht um mit dem "options menu" eine activity für ein impressum und noch eine für "AddCar" zu starten. geht aber irgendwie gar nix, quelltext ist laut ADT ok aber die app macht nix.
    Video 1
    Video 2
    Video 3


    menu.xml

    Code
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >	   	<item    	android:id="@+id/addCar"    	android:orderInCategory="100"    	android:title="@string/addCar"    	/>	<item    	android:id="@+id/impressum"    	android:orderInCategory="100"    	android:title="@string/impressum"    	/></menu>


    menu.java

    Java
    public class Menu extends Activity{	@Override	public boolean onCreateOptionsMenu(android.view.Menu menu)	{		// TODO Auto-generated method stub		super.onCreateOptionsMenu(menu);				MenuInflater blowUp = getMenuInflater();		blowUp.inflate(R.menu.optionsmenu, menu);		return true;	}	@Override	public boolean onOptionsItemSelected(MenuItem item)	{		switch (item.getItemId())		{		case R.id.addCar:						break;					case R.id.impressum:			Intent intent = new Intent("com.example.carmanager.IMPRESSUM");			startActivity(intent);			System.out.println("hello here is menu class");			break;				}			return false;	}	}


    impressum.xml

    Code
    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"	android:layout_width="match_parent"	android:layout_height="match_parent"	android:orientation="vertical" >	<TextView    	android:id="@+id/tvImpressumText"    	android:layout_width="wrap_content"    	android:layout_height="wrap_content"    	android:text="Travis is the coolest Person I know. If you want to send him a cement truck full of bacon, he would love that.If you cant afford to do so, he would also love if you checked out his website mybringback.com to say what´s up!"     	/>	</LinearLayout>


    Manifest

    Code
    <activity        	android:name="com.example.carmanager.Impressum"        	android:label="@string/app_name"         	android:theme="@android:style/Theme.Dialog" >        	<intent-filter>            	<action android:name="com.example.carmanager.IMPRESSUM" />            	<category android:name="android.intent.category.DEFAULT" />        	</intent-filter>    	</activity>



    Ich hab das Tutorial 2-3 mal angeschaut aber mir fällt einfach der Fehler nicht auf...


  • stattd´dem Break ... return true;


    und schreibn mal dir sachen ins Log - da siehst du ob die Programmteileabgearbeitet werden


  • das ist die aktuelle Menu.java


    das Default Statement muss ich allerdings innerhablb der Switch Klammern machen. Brachte aber leider keinen Erfolg ;( Ich google mal weiter, mal sehen ob sich ´n Lichtblick auf tut.

  • Ich glaube, Du solltest an Deinen Debugging-Skills arbeiten. ;)


    1) Setze einen Breakpoint auf die Zeile 'switch (item.getItemId())'
    2) Starte den Debugger (entweder über den großen grünen Käfer -> Rebuild&Debug oder über das schwarze Gerät mit dem kleinen grünen Käfer -> Attach Debugger)
    3) Wähle Deinen Menüeintrag
    4) In der Debugging-Ansichst siehst Du beispielsweise, welchen Wert Du gerade abgreifst. Du kannst via Step Into und Step Over Zeile für Zeile das Programm weiter laufen lassen. Dann siehst Du auch, wo das Programm hin springt.
    4) Du könntest item.getItemId() ein wenig optimieren indem Du es in eine Variable packst. Dann siehst Du auch den genauen Wert.


    Meine Vermutung: Deine Methode wird nicht aufgerufen. In dem Fall dürfte Deine App nie stoppen und der Debugger nie an dem Breakpoint anhalten.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • hm ja da hast du wohl recht, Debuggen ist hald immernoch die Königsdisziplin... Bei Java fällt mir das nicht so schwer, bei Android hab ich es ehrlich gesagt noch nie wirklich ausprobiert.


    Funktioniert das debuggen auch wenn ich mit mein Galaxy S3 angesteckt hab anstatt ein virtuelles Device zu benutzen? Diese virtuellen ruckeln bei mir als hätte ich nen 386er...

  • Funktioniert das debuggen auch wenn ich mit mein Galaxy S3 angesteckt hab anstatt ein virtuelles Device zu benutzen?


    Ja, das funktioniert genauso.
    Insgesamt wird die App ein bisschen langsamer, weil sie ja permanent mit dem Debugger kommuniziert.
    Debugging auf dem Gerät ist auf jeden Fall empfehlenswert, wenn man das mal mit dem Simulator vergleicht. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!