【问题标题】:stopping toast android in other actvity在其他活动中停止 toast android
【发布时间】:2014-10-03 18:27:36
【问题描述】:

我的问题是这样的:

我第一次打开首页在Activity Main里打了个“欢迎词”,没问题,但是当另一个页面通过返回键返回首页时,怎么才能让“欢迎词” " 不再出现?

主要活动的代码是:

public class MyActivity extends Activity {
/**
 * Called when the activity is first created.
 */
MyActivity actvi1;
int cont=0;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);





    Button btnabout=(Button)findViewById(R.id.about);

    //click

    btnabout.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            // definisco l'intenzione di aprire l'Activity "aboutme.java"

            Intent aboutmejava= new Intent(MyActivity.this,aboutme.class);

            startActivity(aboutmejava);
        }

    }

    );


    //toast

       Toast toast = Toast.makeText(getApplicationContext(),
               "Welcome", Toast.LENGTH_SHORT);
       toast.setGravity(Gravity.CENTER_HORIZONTAL, 20, 0);
       toast.show();

aboutme.java 的代码

 protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.aboutme);

    Button btnback=(Button)findViewById(R.id.scritta);

    btnback.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            Intent main = new Intent(aboutme.this,MyActivity.class);

            startActivity(main);

【问题讨论】:

  • 所以您想让这个 toast 仅在您第一次运行应用程序时出现?
  • 是的,应该不会在我回家的时候出现。只有第一次

标签: java android android-toast


【解决方案1】:

如果您希望它仅在应用程序运行的第一次显示,请在SharedPreferences 中添加boolean 标志并在此处检查。有很多例子,但here is one

如果您希望它在应用程序启动时每次首次运行 Activity 时都显示 *,只需将您的 onClick() 代码替换为 onBackPressed()。这样它就不会启动您的MyActivity 的新实例,并且由于Toast 代码位于onCreate() 而不是onResume(),因此当您单击返回按钮返回时它不会运行。

SharedPreferences

【讨论】:

    【解决方案2】:

    这行得通。

        SharedPreferences sp = getPreferences(Context.MODE_PRIVATE);
        int show = sp.getInt("firstlaunch", 0);
        if(show == 0) {
            Toast.makeText(getApplicationContext(), "WELCOME", Toast.LENGTH_LONG).show();
            sp.edit().putInt("firstlaunch", 1).apply();
        }
    

    将它放在你的 home Activity 的 onCreate 方法中。'

    共享偏好是一种“设置”。这是一个加载的 xml 文件,其中包含您的所有设置。当我们第一次运行“sp.getInt”时,您可以看到在“key - fistlaunch”之后我有一个 0。 0 指定如果找不到与该键的任何共享首选项,给我们的 Int SHOW 什么。接下来,如果 int show 等于 0,我们运行 Toast,然后将共享首选项值更改为 1,这样下次运行时它不会显示...

    【讨论】:

    • 至少告知 OP 该代码实际做了什么,而不是声称“它有效”
    • Java 很容易解释。但我会的,为了你。
    • 不适合我。我知道它的作用。但是 OP 没有要求共享偏好。因此,如果您要给出解决方案,至少要解释原因。而且SharedPreferences 也不是你所说的Java。
    • SharedPreference 是一个 Java 类,它是 android API 的一部分。除非您谈论原始代码,否则没有什么只是“java”。它由一组工具集(和本机方法)组成,这些工具集创建了我们所知的 SDK。我指的当然是 Android SDK。
    • 在这种情况下,我只是在第一次启动应用程序时运行 toast,但如果我关闭并重新打开开头,则不执行 toast。
    【解决方案3】:
       boolean b = false;
    if(!b) {
    Toast toast = Toast.makeText(getApplicationContext(),
            "Welcome", Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.CENTER_HORIZONTAL, 20, 0);
    toast.show();
    b = true
    }
    

    有点像?

    【讨论】:

    • 我的意思是把 boolean b = false 放在类的开头(认为那叫全局,对吗?),应该提到:P
    【解决方案4】:

    你是 MainActivity 的另一个实例吗? 为了返回您的主要活动,您应该发送带有标志 FLAG_ACTIVITY_CLEAR_TOP 的 Intent(或在 AndroidManifest.xml 的 launchMode 中设置 android:launchMode="singleTop")

     Intent main = new Intent(aboutme.this,MyActivity.class);
     main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(main);
    

    通过这样做,您的主要活动将被恢复,而不是创建 MainActivity 的新实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多