2017-05-18 96 views
0

因此,我正在與Java Studio在Android工作室,我想從一個不同的類開始一個新班級(我在ListenerServiceFromWear,並希望開始MainActivity)並且一旦Mainactivity啓動,我想在Mainactivity中啓動一個方法(startEmergencyMode();)。如何開始一個新的活動,並開始在該活動中的一個方法

我該如何從ListenerServiceFromWear做到這一點?

+0

''MainActivity毫安=新MainActivity(); ma.startEmergencyMode();''? – f1sh

+0

我嘗試過,但它給view.findById()一個錯誤,因爲它正在尋找在MainActivity中的時候正在尋找listener.java文件。這就是爲什麼我認爲我可能調用另一個java文件的方法,而不是實際啓動mainactivity文件,然後調用方法 – hxwtch

回答

0

我不太明白你的意思是「開始」

在java中,您:

  • 聲明一個static字段或方法
  • 創建對象和使用實例其public字段和方法。

如果你想只是一個MainActivity「實例」,使用一個靜態方法:

public static void startEmergencyMode() { 
    // Code here 
} 

,你可以隨時隨地打電話使用MainActivity.startEmergencyMode()。 請記住,這個靜態方法只能訪問靜態字段和其他靜態方法。

如果你想創建的MainActivity一個實例,只需創建一個與調用方法:

public void startEmergencyMode() { 
    // Code here 
} 


// Somewhere else 
MainActivity activity = new MainActivity(); 
activity.startEmergencyMode(); 

如果你不明白一個靜態和非靜態方法或字段之間的差異,請參考答案在此線程:What does 'public static void' mean in Java?

+0

這可行,但如果我這樣做,它不會找到視圖元素,因爲我在不同的java類。我想我可能不得不首先用意圖開始活動,然後調用該方法? – hxwtch

+0

我不是一個adroid開發者,但我猜'ListenerServiceFromWear'是你創建的一個類?如果是這樣,從哪裏?如果它是由'MainActivity'創建的,只需使用'this'在'ListenerServiceFromWear'的構造函數中傳遞'MainActivity'的實例,然後使用該對象調用 – 086

+0

上的方法。如果這樣做,則活動將不會在Android的循環。所以生命週期事件不會被調用。 – litelite

1

開始MainActivity,意圖和目的的額外放一些標誌會告訴MainActivity調用startMergencyMode()

Intent intent = new Intent(this, Mainactivity.class); 
intent.putExtra("isEmergency", true); 
startActivity(intent); 

然後在Mainactivity實際調用startEmergencyMode()

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // ... 

    Intent intent = getIntent(); 
    boolean isEmergency = intent.getBooleanExtra("isEmergency", false); 

    if(isEmergency){ 
     startEmergencyMode(); 
    } 
} 
+0

謝謝。但通過開始意圖我得到的錯誤:android.app.Application不能轉換爲com.my_emergency.samdesmedt.my_emergency.MainActivity – hxwtch

+0

@ hxwtch它可能與[this]相同的問題(http://stackoverflow.com/questions/18830205 /應用程序崩潰與 - Android的應用程序,應用程序不能待鑄於) – litelite

相關問題