避免从自己开始活动

时间:2015-04-21 09:48:14

标签: android android-intent

我的应用程序中有一个自定义按钮栏,我在几个活动中使用它 它有一个启动SettingsActivity的设置按钮。

问题是:

我也在SettingsActivity中使用此按钮栏,我想避免从它自己开始SettingsActivity。 我在片段中设置onClick for按钮,我在我的活动中使用这个片段然后我不能设置任何标志或额外的数据。

在onClick of Setting按钮中我设置了这样的意图:

intent = new Intent(getActivity(), SettingsActivity.class);
startActivityForResult(intent, 1);

我的所作所为:

ParentActivity所有其他活动都从中延伸,我在其中覆盖了startActivityForResult方法。
结果是我的意图是开始SettingsActivity

@Override
    public void startActivityForResult(Intent intent, int requestCode) {
        super.startActivityForResult(intent, requestCode);
        overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left);
    }

我想要的是什么:

我想知道我如何能够检测出哪个活动称为此意图以及将启动哪个活动?

(抱歉我的英语不好)

2 个答案:

答案 0 :(得分:1)

您可以使用另一个参数name重载startActivityForResult。因此,在“设置”按钮的onClick中,您只需使用重载方法:

onClick(View v){
    intent = new Intent(getActivity(), SettingsActivity.class);
    startActivityForResult(intent, 1, this.getClass().getName());
}

ParentActivity:

public void startActivityForResult(Intent intent, int requestCode, String name) {
if(!name.equals(com.yourpackage.settingsactivity))
    startActivityForResult(intent, requestCode);
else Toast.makeText(this, "Already in SettingsActitivty", Toast.LENGTH_SHORT).show;
}
@Override
public void startActivityForResult(Intent intent, int requestCode) {
    super.startActivityForResult(intent, requestCode);
    overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_out_left);
}

答案 1 :(得分:1)

因此,假设您需要做的就是避免自己调用SettingsActivity,我建议您尝试使用其中一种内置启动模式。

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

如果您使用singleTop作为您的SettingsActivity,当它已经位于您的堆栈顶部时启动它将不会导致启动新活动,而是现有活动将获得其onNewIntent() 1}}调用的方法(如果你不需要采取任何行动,你可以忽略它。)

或者,如果由于某种原因这不起作用,将Marlon的建议更进一步,并假设你以明确的意图(设置类名)启动SettingsActivity,可以覆盖startActivityForResult并检查调用活动是否与目标活动相同,而不必使用name参数重载该方法。

@Override
public void startActivityForResult(Intent intent, int requestCode) {
    if (!intent.getComponent().getClassName().equals(getClass().getName()) {
        super.startActivityForResult(intent, requestCode);
    }
}