2012-07-27 60 views
3

我有一個Android項目。現在我需要創建該項目的第二版。從Android庫項目覆蓋活動

會有什麼不同:

項目的新版本應該在活動中一個不同的內容。

我正在考慮創建一個庫項目和兩個新項目(project1project2),它將使用庫項目,但我不太瞭解如何設置它。

我應該只是將原始項目轉換成庫,然後創建兩個新項目然後然後什麼?如何使project1使用activity1project2在同一個地方使用activity2

編輯

我所成立至今:

MainProject,圖書館具有MainActivity.java和ChildActivity.java


AndroidManifest.xml中

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.mainproject"> 
    <application> 
     <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=".ChildActivity"> 
     </activity> 
    </application> 
</manifest> 

MainActivity.java

public class MainActivity extends Activity { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 

      ((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(MainActivity.this, ChildActivity.class); 
        startActivity(intent); 
       } 
      }); 
     } 
} 

StandAloneProject:它只是ChildActivity.java


<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.standaloneproject"> 
    <application> 
     <activity 
      android:name="com.example.mainproject.MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ChildActivity" > 
     </activity> 
    </application> 
</manifest> 

我想到:

當我啓動StandAloneProject,點擊按鈕,我想從StandAloneProject的ChildActivity(不是來自MainProject )即將啓動。

我得到什麼:

當我啓動StandAloneProject,我看到MainActivity從MainProject,點擊按鈕,得到:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.standaloneproject/com.example.mainproject.ChildActivity}; have you declared this activity in your AndroidManifest.xml? 
+0

你使用Maven? – hennr 2012-07-27 08:00:00

+0

啊,不知道。我猜不行,只是基本的Eclipse Android模板。 – 2012-07-27 08:05:30

+0

您是否正在嘗試創建同一個Android應用的兩個版本? – 2012-07-27 08:09:57

回答

5

問題是如何在MainActivity.java中啓動子活動。 您需要'手動'確保啓動正確的ChildActivity。

這樣做的一種方法是爲意圖明確設置組件。 Context.getPackageName()函數返回您正在運行的應用程序的包名,您可以使用它來標識要啓動的ChildActivity的「正確實例」。在MainActivity.java試試這個在您的的onClick()處理:

Intent intent = new Intent();  
    intent.setComponent(new ComponentName(getPackageName(), getPackageName() + ".ChildActivity")); 
    startActivity(intent); 
+0

工程就像一個魅力。 舊的答案,但我找不到更好的3年以上。 – Carsten 2016-01-07 08:50:14

3

你的做法是正確的。

  1. 創建您的圖書館項目。
  2. 創建一個新項目,創建您需要的活動並添加您的庫項目。
  3. 將Android項目中的AndroidManifest.xml複製到您的新項目中,但指出與項目活動不同的活動,而不是指向庫項目中的活動。
+0

請看看編輯。 – 2012-07-27 08:29:29

+0

我的意思是,我的圖書館項目不會意識到其他項目中的活動。我怎樣才能把這個邏輯放在圖書館項目中? – 2012-07-27 08:50:10

+0

快速修復我的意思是將MyActivity類複製到新項目中,並將新項目(在清單中)引用到新的MyActivity類中,而不是在庫中。該庫仍然會讀取舊的MyActivity類。 – Slickelito 2012-07-27 09:22:54

1

您正處在正確的軌道上。設置一個庫項目和兩個包含lib項目的標準android項目。 請記住將您的清單活動複製到新項目中。當你想分開活動時,你可以擴展你的lib項目中的活動。 project1:MyActivty擴展Activit1 ..項目2 MyActivit

+0

請看看編輯。 – 2012-07-27 08:29:43

+0

一個quckfix可以代替啓動意圖膨脹的活動。 :) – Slickelito 2012-07-27 08:36:29

+0

@Slickelito,我不明白。 – 2012-07-27 08:48:28