2016-08-20 49 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