从菜单

时间:2018-04-13 05:29:19

标签: android menu textview android-view

我确信这很简单,但我是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));
}

任何帮助请...

3 个答案:

答案 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>