0

如何啓動一個新的活動到不是最初片段的片段?例如,下面的代碼是錯誤的。我想在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

所以要啓動MainActivity _from_ SecondFragment,對不對?因爲你的代碼看起來像你想要啓動SecondFragment,如果是這種情況,那麼你應該知道碎片通常不是通過意圖啓動的,你必須改用FragmentManager。 – Kistamushken

+0

好吧,我的MainActivity不是用戶看到的第一個活動。我們來調用這個初始活動FeedActivity。用戶點擊一個按鈕,將其啓動到MainActivity(FirstFragment)中,但我希望它直接啓動到SecondFragment。那有意義嗎? – drearypanoramic

+1

加油吧。讓它更多一點英語...... :( –

回答

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 
} 

UPDATE

所以,這裏是聰明的做法。

首先在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

只是不要忘了檢查空值: )

乾杯。

+0

這個答案工作得很好,很容易實現。我只是將我的mViewPager中的currentItem設置爲我想要訪問的片段的編號,即mViewPager.setCurrentItem(1);其中1是「第二」片段,0是「第一」。我把這一行放在您的評論「//將事務片段化到第二個片段」所在的位置。謝謝! – drearypanoramic

+1

不客氣。如果你正在處理不復雜的邏輯,這種模式是可以的。如果你想實現更簡潔的東西,你最好使用像@Niko Yowono建議的開關盒。我會稍微更新一下我的答案,告訴你,我該怎麼做。 – Kistamushken

+0

真棒,謝謝!這很有意義,並且清除了我不知道的碎片的許多概念。附:你認爲你可以對我的問題進行投票嗎? – drearypanoramic

1

當用戶點擊按鈕,您的MainActivity打開時,其onCreate()將被調用。

你應該onCreate()添加片段交易推出SecondFragment

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
SecondFragment secondFragment = new SecondFragment(); 
ft.replace(R.id.content_frame, secondFragment); 
ft.commitAllowingStateLoss(); 
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; 
}