2016-03-22 4 views
0

Ich bin neu bei Android. Ich habe Hauptaktivität, von der ich verschiedene Klassen aufrufen muss, um verschiedene Funktionen auszuführen. Aber wenn ich zwei Klassen gleichzeitig anrufe, wird nur die letzte Absicht aufgerufen. Kann jemand vorschlagen, zwei oder mehr Klassen gleichzeitig in einer Aktivität anzurufen? DankeAndroid Call 2 oder mehr Klassen von Hauptaktivität

Unten ist mein Codebeispiel

Hauptaktivität

public class MainActivity extends AppCompatActivity { 

    public Api mApi; 
    Button data; 

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

     data = (Button) findViewById(R.id.button2); 



     //calling sygic truck api and implementing sygic call back 
     mApi = Api.init(getApplicationContext(), "com.sygic.truck", "com.sygic.truck.SygicService", mApiCallback); 
     //connecting sygic app 
     mApi.connect(); 



     data.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent1 = new Intent(getApplicationContext(), locationInfo.class); 

       Intent intent2 = new Intent(getApplicationContext(), routeInfo.class); 

       Intent[] list = new Intent[2]; 
       list[0] = intent1; 
       list[1] = intent2; 
       startActivities(list); 

      } 
     }); 

    } 




} 

locationInfo Klasse

public class locationInfo extends AppCompatActivity { 

    public Api mApi; 
    public TextView coordinates; 
    public String currentLocation = ""; 
    public String longitude; 
    public String latitude; 
    public Button data; 
    public String altitude, speed; 

    public int speedLimit; 

    //calling gps class from sygic lib 
    GpsPosition gpsPos = new GpsPosition(); 

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

     coordinates = (TextView) findViewById(R.id.textView); 




     // sygicGetData(); 
     try { 
      Log.v("debug", "Location is...1"); 
      boolean satInfo = true; 
      int maxTime = 0; 

      gpsPos = ApiNavigation.getActualGpsPosition(satInfo, maxTime); 
      longitude = String.valueOf(gpsPos.getLongitude()); 
      latitude = String.valueOf(gpsPos.getLatitude()); 
      altitude = String.valueOf(gpsPos.getAltitude()); 
      speed = String.valueOf(gpsPos.getSpeed()); 
      speedLimit = ApiInfo.getCurrentSpeedLimit(maxTime); 
      Log.v("debug", "Location is...2"); 
      Position pos = new Position(); 
      pos.setPosition(gpsPos.getLongitude(), gpsPos.getLatitude()); 
      currentLocation = ApiLocation.getLocationAddressInfo(pos, maxTime); 


      coordinates.setText("\n" + "Current Location:" + currentLocation + "\n" + "Longitude:" + longitude + "\n" + "Latitude:" + latitude + 
        "\n" + "Altitude:" + altitude + "\n" + "Current Speed:" + speed + 
        "\n" + "Speed Limit:" + speedLimit); 

     } catch (GpsException e) { 
      Log.e("GpsPosition", "Error code:" + e.getCode()); 
     } catch (InvalidLocationException e) { 
      Log.e("Location", "Error code:" + e.getCode()); 
     } catch (GeneralException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

routeInfo Klasse

public class routeInfo extends AppCompatActivity { 

    public String remainingDistance, remainingTime; 
    public String totalDistance, totalTime; 
    public Button data; 
    public TextView coordinates; 
    public RouteInfo routeInfo; 


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

     coordinates = (TextView)findViewById(R.id.textView2); 


     // sygicGetData(); 
     try { 
      boolean info = true; 
      int maxTime = 0; 

      routeInfo = ApiNavigation.getRouteInfo(info, maxTime); 
      totalDistance = String.valueOf(routeInfo.getTotalDistance()); 
      remainingDistance = String.valueOf(routeInfo.getRemainingDistance()); 
      totalTime = String.valueOf(routeInfo.getTotalTime()); 
      remainingTime = String.valueOf(routeInfo.getRemainingTime()); 

      coordinates.setText("\n" + "Total Travel Distance:" + totalDistance + "\n" + "Remaining Travel Distance:" + remainingDistance + "\n" + "Total Travel Time:" + totalTime + "\n" + 
        "Remaining Travel Time:" + remainingTime + "\n"); 

     } catch (GpsException e) { 
      Log.e("GpsPosition", "Error code:" + e.getCode()); 
     } catch (InvalidLocationException e) { 
      Log.e("Location", "Error code:" + e.getCode()); 
     } catch (GeneralException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Android Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.jackfruit.sygicdata4"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".getters.locationInfo"></activity> 
     <activity android:name=".getters.routeInfo"></activity> 
    </application> 

</manifest> 
+0

Was passiert, wenn Sie nach dem Start der letzten Aktivität die Zurück-Taste drücken? Nach bestem Wissen und Gewissen, startActivities() stack nur verwendet werden, um ein synthetisches Konstrukt zurück, nicht Aktivitäten starten in seriellen Dieser Link weitere Informationen hat: [hier] (http://stackoverflow.com/questions/24295906/why-use-start-activities) –

+0

Hallo Srinivas, beim Drücken der Taste ruft es die erste Absicht auf. Gibt es eine Art, wie ich beide zusammenrufe? –

+0

Definieren Sie auch zwei Klassen gleichzeitig.Zu einem bestimmten Zeitpunkt kann sich nur eine Aktivität an der Spitze des Stapels befinden. startActivities startet nicht 2 Aktivitäten und lässt sie gleichzeitig laufen –

Antwort

0

Ok,

startActivities() 

wird verwendet, um etwas ein synthetisches zurück Stapel genannt zu konstruieren.

In einer App, wenn Sie von 1-Aktivität zum anderen zu bewegen, ohne Sie etwas ein „Backstack“ bezeichnet konstruieren

finish() 

in einem der Aktivitäten aufrufen. Es wird als Backstack bezeichnet, da es sich um den Stapel von Aktivitäten handelt, der wiederhergestellt wird, wenn Sie die Zurück-Taste gedrückt halten.

Wenn Sie wollten einen Backstack künstlich schaffen, würden Sie

-startActivities() 

Was dies bedeutet künstlich alles, aber die Aktivität der letzten Absicht in die Backstack eingefügt wird.

Wenn Sie activit 1 und führen Sie dann activity2 einfach anrufen

startActivity() 

auf sie separat

Wenn Sie die 2, um Aufgaben ausführen möchten in parallel Sie etwas namens verwenden müssen laufen wollte " AsyncTask ". Literatur here

+0

Ich dachte, async Aufgabe wird normalerweise verwendet, um etwas zu erhalten oder zu senden, URL –

+0

das ist nicht die einzige Verwendung. Eine Async-Aufgabe blockiert den Benutzeroberflächen-Thread nicht. Wenn Sie beispielsweise darauf hingewiesen haben, dass Netzwerkaufrufe, die im Hauptthread ausgeführt werden, blockieren können, werden sie mit einer asynchronen Task ausgeführt. Sie können auch Android-Handler und Thread-Pool-Varianten verwenden. Aber asynchrone Aufgaben sollten auch funktionieren –

+0

Kannst du ein Beispiel für eine asynchrone Aufgabe für meinen Fall posten, da andere, die ich finde, alle für URL-Links sind? –

Verwandte Themen