2016-03-22 11 views
0

私はアンドロイドを初めて使っています。私はさまざまな機能を実行するために異なるクラスを呼び出す必要がある主なアクティビティを持っています。しかし、同時に2つのクラスを呼び出すときは、最後のインテントだけが呼び出されます。誰かがアクティビティで同時に2つ以上のクラスを呼び出す方法を提案できますか?以下はAndroidのお電話2つ以上のメインアクティビティからのクラス

主な活動

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クラス

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クラス

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 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

前回のアクティビティが開始された後に戻るボタンを押した場合はどうなりますか? 私の知る限りでは、startActivities()は合成バックスタックを構築するためにのみ使用され、連続してアクティビティを起動するのではありません。 このリンクは多くの情報を持っています:[リンク] http://stackoverflow.com/questions/24295906 /理由を使用して開始アクティビティ) –

+0

こんにちはSrinivas、戻るボタンを押すと、それは最初のインテントを呼び出します。私は両方を一緒に呼び出す方法はありますか? –

+0

同時に2つのクラスも定義します。指定された時点でスタックの先頭に1つのアクティビティのみが存在することができます。 startActivitiesは2つのアクティビティを開始せず、同時に実行します –

答えて

0

[OK]を、

startActivities() 

は、合成バックスタックと呼ばれるものを構築するために使用されます。アプリで

あなたは「backstack」と呼ばれるものを構築活動のいずれかで

finish() 

を起動せずに別の1つのアクティビティから移動。これはバック・スタックと呼ばれ、バック・ボタンを押したままに戻ったときに復元されるアクティビティのスタックです。

あなたが人為的にbackstackを作成したい場合

-startActivities() 

だろうか、これは人為的にbackstackへの最後の意思の活動が、すべてのものを挿入しているん。

あなたがactivit 1を実行してからactivity2 を実行したい場合は、タスクに2あなたはと呼ばれるものを使用する必要が並行して実行したい場合は、単に「別に

それらの

startActivity() 

を呼び出しますAsyncTask "を参照してください。文章here

+0

:)私の答えで2クラスを実行する方法を与えてくれました。非同期タスクは、UIスレッドをブロックしないものです。あなたが指摘したように例えば は、メインスレッド上で行う場合は、ネットワーク呼び出しはブロックする可能性を持っているので、彼らは、非同期タスクを使用して行われます。 Androidハンドラとスレッドプールのバリアントを使用することもできます。しかし、非同期タスクも機能するはずです –

+0

をURLに何かを送信するために通常使用されていると思った –

+0

私のケースでは非同期タスクの例を投稿できますか? –

関連する問題