2016-11-08 4 views
-3

Sobald die setOnClickListener ausgeführt wird, möchte ich eine andere Aktivität starten und die Variable cn.getID() an sie senden. Wenn ich innerhalb der anderen Aktivität bin, möchte ich sofort die Methode findlocation starten und cn.getID() dazu geben.Wie starte ich eine andere Aktivität und starte eine Methode darin?

Die Methode findLocation ist noch nicht fertig. Die Idee ist, sobald es die ID der anderen Aktivitäten Schaltfläche bekommt, kann ich mit Sqllite in meiner Datenbank nach dem Ort suchen, zu dem es gehört, erhalten Längen- und Breitengrad und sagen mapcontroller Fokus der Weltkarte auf diesen Punkt.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.verladestellen); 
    final DB_Verladestellen db = new DB_Verladestellen(this); 
    List<DB_Place> placeList = db.getAllDBPlaces(); 
    final LinearLayout layout = (LinearLayout) findViewById(R.id.verladestellen_liste); 

    for (final DB_Place cn : placeList) { 

     final LinearLayout row = new LinearLayout(this); 
     row.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     Button place = new Button(this); 
     place.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     place.setText(cn.getName()); 
     place.setId(cn.getID()); 
     row.addView(place); 
     row.setId(cn.getID()); 

     LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) place.getLayoutParams(); 
     params.weight = 1.0f; 
     place.setLayoutParams(params); 

     place.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Here I want to call the method to start the other activity 
       //and transmit cn.getID(). 
       openMap(null); 
      } 
     }); 

     layout.addView(row); 
    } 
} 

//The method to start the other activity 
public void openMap(View view) { 
    Intent intent = new Intent(this, UI_MainActivity.class); 
    startActivity(intent); 
} 

Dies ist die Methode aus dem Innern der neuen Aktivität I immidietaly ausgeführt werden soll, nachdem es begonnen hat:

public void findLocation(View view){ 
    MapView map = (MapView) findViewById(R.id.map); 
    IMapController mapController = map.getController(); 
    mapController.setZoom(17); 
    GeoPoint myLocation = new GeoPoint(PLACEHOLDER X , PLACEHOLDER Y); 
    mapController.animateTo(myLocation); 
} 

EDIT: @Murat K. Nach einigen Änderungen der jetzt meine ganze Klasse ist:

public class UI_Verladestellen extends AppCompatActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.verladestellen); 
    final DB_Verladestellen db = new DB_Verladestellen(this); 
    List<DB_Place> placeList = db.getAllDBPlaces(); 
    final LinearLayout layout = (LinearLayout) findViewById(R.id.verladestellen_liste); 

    for (final DB_Place cn : placeList) { 

     final LinearLayout row = new LinearLayout(this); 
     row.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     Button place = new Button(this); 
     place.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     place.setText(cn.getName()); 
     place.setId(cn.getID()); 
     row.addView(place); 
     row.setId(cn.getID()); 

     LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) place.getLayoutParams(); 
     params.weight = 1.0f; 
     place.setLayoutParams(params); 

     place.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       openMap(cn.getID()); 
      } 
     }); 

     layout.addView(row); 
    } 
} 

public void openMap(int view) { 
    Intent intent = new Intent(UI_Verladestellen.this, UI_MainActivity.class); 
    intent.putExtra("findLocation", 1); 
    startActivity(intent); 
} 

}

Und das ist das getIntent meiner onCreate in UI_MainActivity Methode:

int i = getIntent().getIntExtra("findlocation", 999); 
    if(i == 1){ 
     findLocation(i); 
    } 

Wie ich in meinen früheren Kommentar bearbeitet, ich kann nicht sehen, wo meine Knopf-ID empfangen ist. Zuerst dachte ich, ich wäre meine ID, aber das würde nicht funktionieren, da die Button ID jede Zahl von 1 bis n sein kann.

+0

In Ihrer Methode 'openMap()' setzen Sie nichts in die Absicht. Sie müssen meine Antwort genau so verwenden, wie sie ist. –

+0

@MuratK.Ich dachte, ich hätte deine Antwort genau so benutzt, wie sie ist. Vielleicht habe ich dich missverstanden. Kannst du mir sagen, was ich vermisse? Tut mir leid, ich bin nicht sehr erfahren. – Glave

Antwort

1

Sie können dies mit einer Intent z.

Intent i = new Intent(BaseActivity.this, YourSecondActivity.class); 
intent.putExtra("METHOD_TO_CALL", 1); 
startActivity(i); 

und in Ihrem onCreate() method des starting Activity Sie check für es.

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    int i = getIntent().getIntExtra("METHOD_TO_CALL", 999); 
    if(i == 1){ 
     callMethod(i); 
    } 

EDIT:

//The method to start the other activity 
public void openMap(View view) { 
    Intent intent = new Intent(this, UI_MainActivity.class); 
    intent.putExtra("METHOD_TO_CALL", 1); // the 1 is a example, put your ID here 
    startActivity(intent); 
} 
+0

Etwas funktioniert nicht richtig. So verstehen Sie es:; 'intention.putExtra (" findLocation ", 1)' und "int i = getIntent(). GetIntExtra (" findlocation ", 999)! = 999;' In der letzten Zeile sagt mir Android Studio " Inkompatible Typen. Erforderlich: Int, Gefunden: Boolean ". – Glave

+0

@Glave oooops, entfernen Sie das '! =' Check. Ich wollte ursprünglich eine if-Anweisung erstellen. –

+0

Okay, die Aktivität beginnt jetzt, aber irgendetwas stimmt noch nicht. Mein 'setOnClickListener' enthält diesen Code jetzt: 'openMap (cn.getID());', aber wenn ich auf den Knopf klicke, sagt mir die neue Aktivität, dass 'i' 999 ist (gibt es einen besonderen Grund für diese Nummer?) statt 1 und ruft die Methode nicht auf. Ebenfalls. Ich kann jetzt nicht sehen, wo meine Schaltfläche ID gerade in der neuen Aktivität empfangen wird. Wenn ich 'i == 1' kann es nicht meine Button ID sein. – Glave

1

Schritt # 1: putExtra() Verwenden Sie Ihre ID-Wert zum Intent hinzufügen, die Sie verwenden, um mit startActivity()

Schritt # 2: In der anderen Tätigkeit, rufen getIntent() in onCreate() zum Abrufen der Intent zum Erstellen der Aktivitätsinstanz verwendet. Rufen Sie get...Extra() auf (wobei ... vom Datentyp abhängt), um Ihren ID-Wert abzurufen. Wenn der ID-Wert existiert, rufen Sie Ihre findLocation() Methode auf.

0

Es hängt davon ab, wie Sie es wollen. Wenn Sie nur ausführen möchten, dass die Aktivität erstellt wird (wenn sie gestartet wird oder sich der Bildschirm dreht), rufen Sie die Methode innerhalb der Methode onCreate auf. Wenn Sie möchten, dass es immer dann aufgerufen wird, wenn der Benutzer zu dieser Aktivität zurückkehrt, die die App verlassen und später wieder zurückkommen kann, dann wäre onResume ein besserer Ort dafür. Der Aufruf der Methode von beiden sollte jedoch wie gewünscht funktionieren.

Ich empfehle auch, über den Activity Lifecycle zu schauen, da dies Ihnen in Zukunft viel helfen wird.

Verwandte Themen