我确信这很简单,但我是Android开发新手,无法找到答案。
在我的主屏幕上,我有许多TextViews,我在数据到达时更新 - 这在应用程序首次启动时正常工作。
当我打开菜单更改设置时出现问题。从菜单返回时,TextViews不再更新。
我看到onCreate在从菜单返回时被调用,所以我猜测问题是对TextViews的引用正在被更改但是因为我使用了引用它没有意义TextView没有更新。
在onCreate中我有:
txtStartPower = (TextView) findViewById(R.id.txtPowerStart);
然后更新我使用:
txtStartPower.setText(Integer.toString(startW));
在我的AndroidManifest.xml中进行设置:
<activity android:name=".SettingsActivity"
android:parentActivityName=".MainActivity"
android:label="Settings">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
在菜单选择代码中我有:
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_settings:
Intent sIntent = new Intent(this, SettingsActivity.class);
startActivity(sIntent);
return true;
}
return(super.onOptionsItemSelected(item));
}
任何帮助请...
答案 0 :(得分:0)
这可能有很多原因:
您确定正在运行的网络任务是在后台线程中执行吗?确保所有基于网络的任务都在后台线程中,否则可能导致UI在主线程中执行网络任务时停止响应,并阻止UI更新。
如果您的文本视图位于片段中,则可能会将更新传递给活动的旧引用而不是新恢复的引用。请注意,此类错误通常与AsyncTasks相关联。没有看到任何更多的代码我不能评论,但如果您正在使用AsyncTask并在onPostExecute中更新您的视图,那么这可能依赖于您的活动失去与片段的连接的问题。您的片段正在更新旧活动,但它没有对新活动的引用。这可以通过将fragment的retain instance方法设置为true来解决。
有关这些的更多信息可以从中获得 这里:
https://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
http://www.mobiledeveloperguide.com/android/using-asynctask-and-fragments.html
希望这有帮助。
答案 1 :(得分:0)
通常,如果要更新与其他活动相对应的视图(在您的情况下为SettingsActivity),则应实现onActivityResult。使用&#34; startActivityForResult()和onActivityResult()&#34;是一般解决方案。当你想要活动之间的沟通。试着找到这将有所帮助。 我的猜测,onCreate不应该调用,因为你的视图已经创建但是onResume会被调用。您还可以学习&#34; Android生命周期&#34;。
答案 2 :(得分:0)
**见下面的更新
我有一个解决问题的答案,但遗憾地失去了一个很好的功能。
当我使用菜单打开设置时,左上角有一个友好的后退箭头。使用它返回,TextViews不再更新。使用箭头会调用onCreate方法以及onResume方法。这导致没有更新。
如果我使用后退键而不是箭头,则onCreate不会被调用,更新会按预期工作。
当我的AndroidManisfest.xml文件中包含以下内容时,会显示箭头
<activity android:name=".SettingsActivity"
android:parentActivityName=".MainActivity"
android:label="Settings">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
删除几个&#39;&#39;从AndroidManifest.xml中离开这个
<activity android:name=".SettingsActivity"
android:label="Settings">
</activity>
我遗憾地失去了后退箭头,但当我使用后退按钮返回时,仅调用onResume并调用TextViews。
也许有一种方法/设置可以添加后退箭头而不会导致onCreate运行。有人知道吗?
**更新 最后是的,有一个简单的解决方法。添加android:launchMode =&#34; singleTop&#34;到MainActivity(如下所示),它按预期工作。
<activity android:name=".MainActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>