【问题标题】:Show toast every time opens android app每次打开 android 应用程序时显示 toast
【发布时间】:2015-10-27 13:38:55
【问题描述】:

我想在每次打开应用程序时表示欢迎祝酒词。上面的代码可以正常工作,但每次屏幕旋转时都会显示欢迎祝酒词。

       protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
       Toast.makeText(getApplicationContext(), "WELCOME!!!" , Toast.LENGTH_LONG).show();

有没有办法在每次打开应用时只显示一次吐司?

清单:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.im.gernan" >   
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<application
    android:name="com.example.im.gernan.MyAppCtx"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

【问题讨论】:

  • 存储一个名为 welcomeShown 的布尔值并将其更改为 onCreate?
  • 只需在清单中添加这一行 android:configChanges="keyboard|keyboardHidden|orientation"
  • 在共享首选项中添加一个布尔标志developer.android.com/intl/es/reference/android/content/…
  • 谢谢大家。现在正在使用 ApplicationContext 类。我添加清单以显示上下文类的引用

标签: java android android-toast


【解决方案1】:

正如评论中提到的,添加一个标志来指示它是否显示。 一个地方可能是活动本身,但活动可以在应用程序处于活动状态时完成并重新打开。应用上下文的生命周期只知道 onCreate 和 onDestroy 并保持空应用会话,这是为了让你的 toast 真正只有在应用启动后才会出现。

例子:

这可能是一个应用程序上下文类,在清单中作为应用程序引用。

public MyAppCtx extends Application {
  public boolean toasted = false;
}

那么在任何活动中你都可以这样做:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ...

    if (!((MyAppCtx)getApplicationContext()).toasted) {
        Toast.makeText(getApplicationContext(), "WELCOME!!!" , Toast.LENGTH_LONG).show();
        ((MyAppCtx)getApplicationContext()).toasted = true;
    }

    ...
}

现在,当此活动开始时,它会检查应用程序上下文是否您表示欢迎。如果没有,它会显示并设置开关。就这样。玩得开心

【讨论】:

  • 所以我必须添加一个名为 MyAppCtx 的新类并在那里添加第一个代码?我可以在不添加新类的情况下这样做吗?
  • 你可以,但是当你读过。这取决于不同部分的生命周期。如果您将该标志放在一个活动中,它将在活动重新进入整个生命周期时被重置,这可能发生在一个应用程序的使用中。但我从来没有写过一个应用程序,它最终没有我自己的应用程序上下文。因为它让你的生活更轻松。使用首选项有一个答案,它也可以工作,并在多个应用程序启动时保留信息。
  • 就是这样。工作得很好。谢谢
【解决方案2】:

如果您的 toast 已经显示,您可以在 ApplicationContext 中存储一个布尔值或在某个地方存储一个单例 - 如果是,则不要再次显示该 toast

【讨论】:

    【解决方案3】:

    声明一个变量

    static boolean value=false;
    if(value==false)
    {
    value=true;
    //show welcome toast
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-07
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多