如何向不是初始片段的片段启动新活动?例如,以下代码是错误的。我想在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);
}
答案 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();