如何向不是初始片段的片段启动新活动?

时间:2015-10-13 05:52:03

标签: java android android-fragments android-intent android-activity

如何向不是初始片段的片段启动新活动?例如,以下代码是错误的。我想在SecondFragment.class上启动MainActivity.class。看似简单但无法在任何地方找到答案。非常感谢所有帮助!

public void LaunchSecondFragment(View view) {
    view.startAnimation(AnimationUtils.loadAnimation(this, R.anim.image_click));

    Intent intent = new Intent(this, SecondFragment.class);
    startActivity(intent);
}

3 个答案:

答案 0 :(得分:2)

因此,在开始活动之前,您必须执行以下操作:

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("launchSecondFragment", true)
startActivity(intent)

并在您的MainActivity onCreate()

if(getIntent().getBooleanExtra("launchSecondFragment", false)) {
//do fragment transaction to second fragment
} else {
//do fragment transaction to the first fragment
}

<强>更新

所以,这是一个聪明的方法。

首先在MainActivity.class中创建枚举

public enum FragmentNames {
FIRST_FRAGMENT,
SECOND_FRAGMENT
}

然后定义一个字符串常量来获取和放置这个额外的(也在MainActivity中)

public static final String FRAGMENT_EXTRA = "fragmentExtra";

所以现在当你开始一项活动时,你应该这样做:

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(MainActivity.FRAGMENT_EXTRA, MainActivity.FragmentNames.SECOND_FRAGMENT);
startActivity(intent);

并在MainActivity onCreate()方法中捕获:

FragmentNames name = getIntent().getSerializableExtra(FRAGMENT_EXTRA);
switch(name) {
case FIRST_FRAGMENT:
//do stuff
break;
case SECOND_FRAGMENT:
//do stuff
break;
default:
//load default fragment(FirstFragment for example)
}

枚举还有什么好看的?您提到您正在使用此意图来定义ViewPager的当前项。嗯,好消息,枚举有序数()。

基本上你可以这样做:

mViewPager.setCurrentItem(name.ordinal());

在这种情况下,FIRST_FRAGMENT的序数()为0,SECOND_FRAGMENT的序数为1。

不要忘记检查空值:)

干杯。

答案 1 :(得分:2)

尝试此操作以启动活动:

Intent intent = new Intent(this, MainActivity.class);   
int fragmentIndex = 2;
intent.putExtra("fragment_index", fragmentIndex);
startActivity(intent);

这是MainActivity的onCreate

Bundle extras = getIntent().getExtras();
int fragmentIndex;
if(extras != null) {
    fragmentIndex = extras.getInt("fragment_index",1);
}
switch(fragmentIndex) {
    case 1:
        //display fragment 1
        break;
    case 2:
        //display fragment 2
        break;
    case 3:
        //display fragment 3
        break;
}

答案 2 :(得分:1)

当用户点击按钮并且您的MainActivity打开时,系统会调用onCreate()

您应该在onCreate()中添加片段交易以启动SecondFragment

FragmentTransaction ft = getFragmentManager().beginTransaction();
SecondFragment secondFragment = new SecondFragment();
ft.replace(R.id.content_frame, secondFragment);
ft.commitAllowingStateLoss();