Android更新在另一个活动上调用onBackPressed时的活动

问题描述:

正如标题所暗示的,我的目标是在另一个ActivityAddActivity”被反向按下时更新一个ActivityMainActivity”上的一些变量。目前,我可以在MainActivity上更新变量的唯一方法是创建一个新的实例,我不想这样做。我希望变量的更新发生在已经实例化的MainActivity上。一些代码片段都低于:Android更新在另一个活动上调用onBackPressed时的活动

public class AddActivity extends MainActivity { 
    .... 
    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     updateMain(); 
    } 
} 

public class MainActivity extends Activity { 
    ....  
    // This gets executed when the Activity gets created 
    @Override 
    protected void onStart() { 
     super.onStart(); 
     Log.d("tag", "main onstart"); 
     updateMain(); 
    } 

    protected void updateMain() {  
     DBAdapter dba = new DBAdapter(this); 
     dba.open(); 
     .... 
     double cost = dba.getCost(); 
     String costString = String.valueOf(cost); 
     textView.setText(costString); 
     dba.close(); 
    } 
} 
+0

是否有任何错误在你logcat或什么问题 – 2014-09-23 02:52:01

+0

我会再次模拟它并观察LogCat。 – Hayden 2014-09-23 02:53:20

+0

LogCat没有显示任何异常情况。 – Hayden 2014-09-23 03:06:28

的AddActivity延伸MainActivity,所以当你在AddActivity调用updateMain(),它会调用AddActivity的updateMain但不MainActivity的,所以它不会生效。

public class AddActivity extends MainActivity { 
    .... 
    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     updateMain();// it is this.updateMain, while 'this' here means a AddActivity instance. 
    } 
} 

我认为AddActivity扩展MainActivity不是必须的(也许...)。您可以将数据写入SharePreference,然后从您的MainActivty中读取它。

+0

好的,我会测试MainActivity是否有必要(团队成员的设计决定)。将尽快报告。 – Hayden 2014-09-23 03:06:13

+0

http://developer.android.com/guide/faq/framework.html#3这可能会帮助你。 – EricHua23 2014-09-23 03:19:51

随着有点顿悟感谢改为@ EricHua23,我并不需要延长MainActivityupdateMain()在呼唤AddActivityupdateMain()。所以我做了一个自定义的ActivityRootActivity类,它通过覆盖onCreate()MainActivity实例存储到一个变量中,我简单地将所有类扩展为RootActivity。这样,我可以通过这个变量访问MainActivity

您可以通过使用处理器中AddActivity和主要活动更新来自附加活动主要活动onBackpressed利用处理器和AddActivity处理程序更新变量内您要发送空消息, 在应用类中定义的处理程序,并制定者和getter方法并在mainActivity和AddActivity中使用它。