簡體   English   中英

我如何向不是初始片段的片段啟動新的活動?

[英]How can I launch a new Activity to a Fragment that is not the initial fragment?

我如何向不是初始片段的片段啟動新的活動? 例如,以下代碼是錯誤的。 我想在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);
}

因此,在開始活動之前,您必須執行以下操作:

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的當前項目。 好吧,好消息,枚舉具有ordinal()。

基本上,您可以執行以下操作:

mViewPager.setCurrentItem(name.ordinal());

在這種情況下,FIRST_FRAGMENT的ordinal()為0,SECOND_FRAGMENT的ordinal為1。

只是不要忘記檢查null :)

干杯。

嘗試以下步驟開始活動:

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;
}

當用戶單擊按鈕並打開您的MainActivity ,將調用其onCreate()

您應該在onCreate()添加片段事務以啟動SecondFragment

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM