【问题标题】:Loop of activities and how to restrict them活动循环以及如何限制它们
【发布时间】:2013-12-05 17:13:17
【问题描述】:

我面临旧活动之间循环的问题,为了进一步解释,我有: Activity1 -> Activity2 -> Activity3 -> Activity4 -> Activity5 -> 发送邮件。

用户可以通过keydown多次返回Activity4,然后再次返回Activity5并发送邮件。此外,它会创建两个/多个 activity4 副本,用户必须按返回键才能关闭活动。我希望活动只有一次可用。我通过使用onpause 完成呼叫直到Activity 5 解决了这个问题。但是由于发送电子邮件的意图使我退出了应用程序,并且当我完成了所有活动on pause 我无法回到应用程序中,任何人都可以帮我解决这个问题....

public void onClick(View v) {
        // TODO Auto-generated method stub

        getdata();

        String message = message
                ;
        final Intent emailIntent = new Intent(
                android.content.Intent.ACTION_SEND);
        emailIntent.setType("plain/text");
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
                new String[] { "google@gmail.com" });
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
                "subject");
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
        startActivityForResult(Intent.createChooser(emailIntent, "Send mail..."),1);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        Intent Act2Intent = new Intent(New.this, Old.class);
        startActivity(Act2Intent);

    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        finish();
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent Act2Intent = new Intent(New.this, Older.class);
            startActivity(Act2Intent);
            finish();
            return true;
        }
        return false;
    }

    @Override
    public void onStop() {
        super.onStop();
        EasyTracker.getInstance(this).activityStop(this);
    }

【问题讨论】:

  • 不要使用finish(); Activity5 ,而不是在创建时使用完成,将这两个标志添加到新的活动中以杀死所有其他活动。 Act2Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Act2Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  • bobby ji mujhe ye mehod use karna nahi aata kya aap ye code me edit karke post kar sakte ho 感谢 monika
  • @user3058783 尝试用通用英语交流。
  • 我正在尝试flag方法请等待更新
  • @user3058783 根据您的要求在答案中发布了代码,让我知道它是否有效

标签: android email android-intent android-activity


【解决方案1】:

不要在Activity5 中使用finish();

不要使用finish,而是在创建activity 时始终将这两个标志添加到新的activity 以终止所有其他活动。

Act2Intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Act2Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

这不会创建两个/多个活动副本。

【讨论】:

    【解决方案2】:

    您需要将您开始的ActivitylaunchMode 属性设置为singleTop。这将导致传入的 Intent 被传递到现有实例,而不是在该 Activity 已经位于任务堆栈的顶部时启动一个新实例。

    这是在manifest 中通过将android:launchMode="singleTop" 添加到<activity> 元素来完成的

    onPause() 中避免finish()

    参考文档http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多