Android Fragments 如何启动Activity并显示特定片段

siv3szwd  于 2023-05-18  发布在  Android
关注(0)|答案(4)|浏览(123)

我有一个MainActivity,它有几个片段被添加,然后显示/隐藏。这是因为MainActivity使用NavigationDrawer。点击抽屉中的项目会导致添加不同的片段(如果它们不存在),或者如果它们存在则显示/隐藏。
我的问题是,如何通过不同Activity的Intent启动MainActivity,同时显示特定片段?
我是否必须向我的MainActivity传递一些额外的数据,然后根据这些数据添加/显示/隐藏相关的片段?还有别的办法吗

x7yiwoj4

x7yiwoj41#

当你创建Intent时,你可以给予它一个额外的值来决定要加载的片段。

Intent i = new Intent(this, ActivityClass.class);
i.putExtra("frgToLoad", FRAGMENT_A);

// Now start your activity
startActivity(i);

现在,在你的Activity中检查额外的并加载正确的Fragment:

OnCreate(){
    ...

    int intentFragment = getIntent().getExtras().getInt("frgToLoad");

    switch (intentFragment){
        case FRAGMENT_A:
            // Load corresponding fragment
            break;
        case FRAGMENT_B:
            // Load corresponding fragment
            break;
        case FRAGMENT_C:
            // Load corresponding fragment
            break;
    }
}
wn9m85ua

wn9m85ua2#

您可以使用sharedPreference来实现这些目标。打开TAB/Fragment后保存索引。

//get current tab
        sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
        String position = sharedPreferences.getString("tab_opened", null);
        if(position==null){
            viewPager.setCurrentItem(1,true);
        }else if(position=="0"){
            viewPager.setCurrentItem(0,true);
        }else if(position=="1"){
            viewPager.setCurrentItem(1,true);
        }else if(position=="2"){
            viewPager.setCurrentItem(2,true);
        }

}// <<<~~~ THAT IS END OF onCreate() method.

请参考本教程:OPEN THIS

sirbozc5

sirbozc53#

如果你正在寻找这样的东西,希望如此!

@Override
public void onNavigationDrawerItemSelected(int position) {    
    Fragment fragment;
    FragmentManager fManager = getFragmentManager();
    Bundle args = new Bundle();
    args.putInt(MCConstants.ARG_SECTION_NUMBER, position);
    clearAllBackStack();
    FragmentTransaction fTransaction = fManager.beginTransaction();

    switch (position) {
    case 0:
        fragment = new FirstFragment();
        fragment.setArguments(args);
        fTransaction.replace(R.id.container, fragment,
                "FTAG").commit();
        break;
    case 1:
        fragment = new SecFragment();
        fragment.setArguments(args);
        fTransaction.replace(R.id.container, fragment,
                "STAG").commit();
        break;
    case 2:
        fragment = new ThirdFragment();
        fragment.setArguments(args);
        fTransaction.replace(R.id.container, fragment,
                "TTAG").commit();
        break;
    }
}
huus2vyu

huus2vyu4#

在Kotlin中

val i = Intent(context, MyActivity::class.java)
i.putExtra("fragmentToLoad", "fragment2")
startActivity(i)

在您的Activity中检查额外的并加载预期的Fragment:

val intentFragment = intent?.extras?.getString("fragmentToLoad")
when (intentFragment) {
    "fragment2" -> {
        val fragment = Fragment2()

        supportFragmentManager.beginTransaction()
            .replace(R.id.main_content, fragment)
            .commit()
    }
}

android navigation-migrate

相关问题