Wie mehrere Buttons verlinken?

  • Antworten:15
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 94

08.02.2015, 15:52:39 via Website

Moin

Ich hab auf der Startseite mehrere Buttons angelegt. Diese sollen jetzt jeweils auf eine andere "Seite" führen. Derzeit ist es aber so, das sie alle auf die selbe Seite führen. Und der "zurück Button (soft/hardkey)" blättert alle Java klassen durch, was aber nicht sinn der Sache ist (hab den zumindest nicht bewusst mit irgendwas verlinkt)

Hoffe da mal auf eure Hilfe

Hier mal mein Code (MainActivity)
http://pastebin.com/tNX6MhTi

Danke euch schon mal

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

08.02.2015, 16:01:52 via Website

Hallo Talsan,
es ist einfacher, wenn du deinen Code direkt ins Forum schreibst ;)


Du hast diesen onClick Listener:

 @Override
    public void onClick(View v) {

        startActivity(new Intent(this,tele_nr.class));
        startActivity(new Intent(this,tf_handbuch.class));
        startActivity(new Intent(this,bda_vda.class));
        startActivity(new Intent(this,db_regeln.class));
        startActivity(new Intent(this,va_dienste.class));
    }

So immer überlagen was macht der Code:
1. Startet Activity tele nr.
2. Startet Activity handbuch etc..
Dau machst das immer egal welcher button gedrückt wurde.

Jetzt musst du duch ifs oder switch/case herausfinden von welchem Button der click Event kommt:

int id = v.getId(); //View ID holen

switch(id)
{
case R.Id.deinButton1:  startActivity(...); //Jeden Button einzeln über die ViewID identifizieren und den jeweiligen Code ausführen.
}

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 94

08.02.2015, 16:12:35 via Website

    public void onClick(View v) {

    int id = v.getId();

    switch(id)
    {
        case R.id.tele_nr: startActivity(new Intent(this,tele_nr.class));
        case R.id.tf_handbuch: startActivity(new Intent(this,tf_handbuch.class));
    }

Wäre das so dann richtig?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

08.02.2015, 16:13:27 via Website

Genau sieht doch garnicht so falsch aus ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 94

08.02.2015, 16:14:23 via Website

Ok dann schreib ich das mal zuende und teste die apk :)

Antworten
  • Forum-Beiträge: 94

08.02.2015, 16:22:13 via Website

Mh Funktioniert nicht :(

    @Override
// Buttons werden auf die jeweilige Java Class verlinkt
public void onClick(View v) {

    int id = v.getId();

    switch (id) {
        case R.id.tele_nr:
            startActivity(new Intent(this, tele_nr.class));
        case R.id.tf_handbuch:
            startActivity(new Intent(this, tf_handbuch.class));
        case R.id.bda_vda:
            startActivity(new Intent(this, bda_vda.class));
        case R.id.db_regeln:
            startActivity(new Intent(this, db_regeln.class));
        case R.id.va_dienste:
            startActivity(new Intent(this, va_dienste.class));
        case R.id.beenden:
            startActivity(new Intent(this, System.exit(0)); //Das da geht nicht, aber erst mal egal ;)

— geändert am 08.02.2015, 16:24:11

Antworten
  • Forum-Beiträge: 94

08.02.2015, 16:25:34 via Website

Geändert hab ich da was ich gepostet hab. Alles andere ist noch wie vorher.

package san.tal.tfapp;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity implements View.OnCreateContextMenuListener, View.OnClickListener {

Button tele_nr;
Button tf_handbuch;
Button bda_vda;
Button db_regeln;
Button beenden;
Button va_dienste;


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

    tele_nr = (Button) findViewById(R.id.tele_nr);
    tf_handbuch = (Button) findViewById(R.id.tf_handbuch);
    bda_vda = (Button) findViewById(R.id.bda_vda);
    db_regeln = (Button) findViewById(R.id.db_regeln);
    beenden = (Button) findViewById(R.id.beenden);
    va_dienste = (Button) findViewById(R.id.va_dienste);
    tele_nr.setOnClickListener(this);
    tf_handbuch.setOnClickListener(this);
    bda_vda.setOnClickListener(this);
    db_regeln.setOnClickListener(this);
    beenden.setOnClickListener(this);
    va_dienste.setOnClickListener(this);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, 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();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
// Buttons werden auf die jeweilige Java Class verlinkt
public void onClick(View v) {

    int id = v.getId();

    switch (id) {
        case R.id.tele_nr:
            startActivity(new Intent(this, tele_nr.class));
        case R.id.tf_handbuch:
            startActivity(new Intent(this, tf_handbuch.class));
        case R.id.bda_vda:
            startActivity(new Intent(this, bda_vda.class));
        case R.id.db_regeln:
            startActivity(new Intent(this, db_regeln.class));
        case R.id.va_dienste:
            startActivity(new Intent(this, va_dienste.class));
        case R.id.beenden:
            startActivity(new Intent(this, System.exit(0))); //Das da geht nicht, aber erst mal egal ;)
    }
}

}

— geändert am 08.02.2015, 16:25:52

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

08.02.2015, 16:26:35 via Website

Pascal P.

Edit: Ich würde die App nie per Code beenden.
Beenden kann das der User über die Home bzw. Back Taste.
Dadurch wird ein Beenden überflüssig (es sei denn du hast einen Service etc.)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 94

08.02.2015, 16:27:37 via Website

Dann muss ich nur die Zurück Taste richtige belegen. Aktuell blättert sie alle Activitys durch

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

08.02.2015, 16:29:19 via Website

Nein du hast das Prinzip noch nicht begriffen.

Normalerweise beendet man/ich alle Apps indem ich wieder zum Homescreen per Hometaste zurückgehe.
Das mit der Backtaste ist ok so da würde ich nichts dran ändern.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 94

08.02.2015, 16:30:08 via Website

Naja aber erst mal möchte ich mich um die Buttons kümmern. Das sie darauf linken was da drauf steht.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

08.02.2015, 16:31:20 via Website

Das sollte ja jetzt funktionieren.
Die Buttons müssten nun je iene Activity öffenen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 94

08.02.2015, 16:33:19 via Website

Machen sie aber nicht. Es wird immer noch auf die selbe verlinkt :(

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

08.02.2015, 16:36:40 via Website

Ok, hab ich übersehen.
Das ist kein Vollständiges switch Statement.
Schau dir mal das an: http://stackoverflow.com/questions/1504160/android-use-a-switch-statement-with-setonclicklistener-onclick-for-more-than-1

switch(if)
{
case R.Id.DeinBtutton. startActivitiy(...);
break; //Ein break oder return muss da drin sein

case ...
}

LG Pascal //It's not a bug, it's a feature. :) ;)

Talsan

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

08.02.2015, 16:43:00 via Website

Gut, wenn deine Frage jetzt beantwortet ist, dann setzte deinen Thrad bitte noch auf Beantwortet.
[Über deinem ersten Post auf "Mehr" -> "Beantwortet"]

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten

Empfohlene Artikel