2016-08-20 48 views
1

我知道,這個問題被問過,但我已經嘗試了所有的解決方案,並得到錯誤從活動調用的方法在另一

我對Android的一室公寓兩張活動......

第一個所謂的「 MainActivity」和包含的方法‘deleteFromArrayList()’ 上稱爲謝勝利‘DeletButtonActivity’,幷包含一個方法‘刪除(視圖v)’

我想要調用‘deleteFromArrayList()’wihtout創建另一個類,或使方法靜態....因爲我有一個ArrayList裏面deleteFromArrayList()

注:我髮指數的價值,我想在DeleteButtonActivity使用意向..the代碼從數組列表中刪除是 公共無效刪除(視圖v){

try { 

     Intent i = new Intent(DeleteButton.this, MainActivity.class); 
     i.putExtra("index", (int) spinner2.getSelectedItemId()); 

     (new MainActivity()).DeletButtonActivity(); 

     Toast.makeText(getApplicationContext(), "it was deleted", Toast.LENGTH_SHORT).show(); 



    } 
    catch(Exception e){ 
     Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_SHORT).show(); 


    } 


} 

和MainActivity

代碼
public void deleteFromArrayList(){ 

    this.arrayList.remove(getIntent().getIntExtra("index",-1)); 

} 

當我運行該應用程序我得到一個錯誤的NullPointerException ,,, 誰能幫助我..please 希望我所描述的問題非常好

+0

難道是arrayList從來沒有創建?即它沒有值 –

+0

'(新的MainActivity())'。你不能自己實例化一個android活動,框架爲你做了這些(例如,當你用'intent'調用'startActivity'時)。你的代碼有很多問題,你需要在開始之前閱讀一些基本的例子。 – Mike

+0

沒有..我創建它,每個想法都運行良好,直到我試圖調用方法 – W2hkZ

回答

0

在Android的活動也不只是一個簡單的類,但他們也有Lifecycle

的活動有本質四種狀態:

如果活動是在屏幕的前景(在 堆棧頂部),它處於活動狀態或正在運行。如果某個活動失去了焦點,但 仍然可見(即,新的非全尺寸或透明活動 已將焦點放在活動的頂部),該活動已暫停。

一個暫停的活動是完全 活着(它保持所有的狀態和成員信息和 仍然附着在窗口管理器),但可以通過在極端低內存情況下的 系統被殺害。

如果一項活動完全被另一項活動遮蔽,則其被停止。它仍然保留所有 狀態和成員信息,但是, 用戶不再可見它,因此其窗口處於隱藏狀態,並且在其他位置需要內存時,它通常會被系統 中止。

如果某個活動暫停或停止,則系統可以通過要求其完成 或僅乾脆終止其進程,從而從內存中刪除該活動。當它再次顯示到 用戶時,它必須完全重新啓動並恢復到之前的 狀態。

所以你的代碼的問題是,當你要訪問數組中停止活動時,實例你一直在使用之前可能不會活着了。

如何解決你的問題

一個非常簡單的方法是使用參數傳遞你從一個活動做過渡之前,其他的,這個你會通過你的數組作爲intent extra和那麼當您通過使用onActivityResult() callback完成第二個活動時,您「得到結果」。

第二種方法可能是使用類似於Activity的Service,但它沒有UI並且它有自己的生命週期。能夠活着,即使你應用它也不是。使用一個服務,你會保持數組內的服務,你會communicate與數組進行通常的操作。第三種方法是使用EventBus。活動,碎片,線程,服務之間非常簡單的通信機制。在Android Dev Summit 2015上有一個名爲Android Application Architecture的精彩演講,它使用EventBus作爲溝通機制,並在REST Android App上實現MVC架構模式。

回到你的問題。如果您只需要在兩個活動之間「分享」數組,請使用第一種方法。第二個和第三個只是不同選擇方案的例子,您需要的不僅僅是這些。

0

你不能這樣做。有活動或片段之間交流的機制。

在可以使用startActivityForResult,這是活動A調用活動B,那麼B中你做的東西,並傳達結果返回到活動A.

你可以有另一種解決方法,你想要什麼。如果你可以在你的兩個活動中訪問數據,你可以在其中修改其中的一個,當活動開始時,它會顯示更新的數據。

請首先閱讀關於活動here的好消息,並提供更多關於您的問題的背景。

+0

我有3個不同的活動相同arrayList ...當我在活動2中選擇元素<我想要從所有活動中刪除該元素,所以我創建了一種方法,從主要活動中刪除它,因此它將從其他 – W2hkZ

+0

刪除沒有看到用例。但是,在三種活動中尋找一種方法來獲得數組的單個實例。 –

+0

是的..我試圖在一個活動顯示在所有其他活動arrayList中的更改 – W2hkZ