Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在另一个活动上调用OnBackpress时Android更新活动_Java_Android_Android Activity - Fatal编程技术网

Java 在另一个活动上调用OnBackpress时Android更新活动

Java 在另一个活动上调用OnBackpress时Android更新活动,java,android,android-activity,Java,Android,Android Activity,正如标题所示,我的目标是在一个活动“main活动”上更新一些变量,而另一个活动“AddActivity”被反按。目前,在MainActivity上更新变量的唯一方法是创建它的新实例,我不想这样做。我希望变量的更新发生在已实例化的MainActivity上。下面是一些代码片段: public class AddActivity extends MainActivity { .... @Override public void onBackPressed() {

正如标题所示,我的目标是在一个
活动
main活动
”上更新一些变量,而另一个
活动
AddActivity
”被反按。目前,在
MainActivity
上更新变量的唯一方法是创建它的新实例,我不想这样做。我希望变量的更新发生在已实例化的
MainActivity
上。下面是一些代码片段:

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();
    }   
}

AddActivity扩展了MainActivity,因此当您在AddActivity中调用updateMain()时,它将调用AddActivity的updateMain,而不是MainActivity的updateMain,因此它不会生效

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

我认为AddActivity扩展main活动不是必须的(可能…)。您可以将数据写入SharePreference,然后从MainActivty读取数据

多亏了@EricHua23,我才有了一点顿悟,我不需要扩展
MainActivity
,而
updateMain()
正在调用
AddActivity
updateMain()
。因此,我做的是创建一个自定义的
Activity
RootActivity
类,通过重写
onCreate()
MainActivity
实例存储到一个变量中,我只需使所有类扩展
RootActivity
。通过这种方式,我可以通过此变量访问
MainActivity

您可以在AddActivity内使用处理程序从AddActivity更新主活动,并在主活动上使用返回时使用处理程序和所需的AddActivity处理程序更新变量内发送空消息,
在应用程序类中定义处理程序,并将其设置为setter和getter方法,并在mainActivity和AddActivity中使用它。

您的logcat是否有任何错误或问题是什么?我将再次模拟它并观察logcat。logcat没有显示任何异常。您确定这是必要的吗?您可能需要更新onResume方法中的活动。或者您可能想使用。它将为您处理更新UI。尝试了onResume(),但没有工作。好的,我将测试MainActivity是否有必要(由团队成员进行设计决策)。我很快就要报告了。