SplashScreen Activity onClick 打开 MainActivity 并替换 Activity 的片段容器中的片段

SplashScreen Activity onClick to open MainActivity and replace fragment in that Activity's fragment container

你好,这个真的很挣扎,因此我在寻找解决方案一整天但没有运气后的第一个 post。

我有一个启动画面,它有一个带有 onClickListener 的 ImageView,单击它可以很好地打开我的 MainActivity:

SplashActivity.java

      bookMain.setOnClickListener(new View.OnClickListener() {

       @Override
        public void onClick(View view) {
            Intent intent = new Intent(SplashActivity.this, MainActivity.class);
            startActivity(intent);
            }

但是我想要实现的是,当单击按钮时,它会打开我的 MainActivity,但是用另一个片段替换 MainActivity 中的 fragment_container(这就是我的底部导航栏的工作方式).

这是 MainActivity 中的代码,它在单击导航按钮时处理片段替换,本质上我希望启动画面的单击打开 "BookFragment" 而不是直接转到 "RoomsFragment":

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //STANDARD ON CREATE OPEN TO LOAD INITIAL LAYOUT
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


//THIS CREATES A BLANK CONTAINER FOR EACH FRAGMENT YOU CREATE TO GO IN
    if (findViewById(R.id.fragment_container) != null) {
        // However, if we're being restored from a previous state,
        // then we don't need to do anything and should return or else
        // we could end up with overlapping fragments.
        if (savedInstanceState != null) {
            return;
        }
        // Create a new Fragment to be placed in the activity layout
        RoomsFragment firstFragment = new RoomsFragment();
        // Add the fragment to the 'fragment_container' FrameLayout
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment).commit();


//THIS CREATES THE NAV BAR AND TELLS WHAT FRAGMENT TO PUT IN THE CONTAINER WHEN A TAB IS SELECTED
        BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar);
        bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelected(@IdRes int tabId) {
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

                //TAB1 - THE DEFAULT TAB
                if (tabId == R.id.tab_rooms) {

                    RoomsFragment newFragment = new RoomsFragment();
                    transaction.replace(R.id.fragment_container, newFragment);
                    transaction.addToBackStack(null);
                    transaction.commit();

                    //TAB2
                } else if (tabId == R.id.tab_shisha) {

                    // THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
                    ShishaFragment newFragment = new ShishaFragment();
                    transaction.replace(R.id.fragment_container, newFragment);
                    transaction.addToBackStack(null);
                    transaction.commit();

                    //TAB3
                } else if (tabId == R.id.tab_cocktails) {

                    // THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
                    CocktailsFragment newFragment = new CocktailsFragment();
                    transaction.replace(R.id.fragment_container, newFragment);
                    transaction.addToBackStack(null);
                    transaction.commit();

                    //TAB4
                } else if (tabId == R.id.tab_food) {

                    // THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
                    FoodFragment newFragment = new FoodFragment();
                    transaction.replace(R.id.fragment_container, newFragment);
                    transaction.addToBackStack(null);
                    transaction.commit();

                    //TAB5
                } else if (tabId == R.id.tab_book) {

                    // THIS BIT BELOW IS WHAT CHANGES THE FRAGMENT IN THE CONTAINER
                    BookFragment newFragment = new BookFragment();
                    transaction.replace(R.id.fragment_container, newFragment);
                    transaction.addToBackStack(null);
                    transaction.commit();
                }


            }


        });

更正工作 SplashActivity.java:

在onCreate方法中:

//ONCLICK LISTENER FOR THE ENTER BUTTON AND BOOK BUTTON ON SPLASH PAGE


    Button enterButton = (Button) findViewById(R.id.enter_button);
    enterButton.setOnClickListener(SplashActivity.this);

    Button bookButton = (Button) findViewById(R.id.book_button);
    bookButton.setOnClickListener(SplashActivity.this);

}

public void onClick(View v) {
    Intent intent = new Intent(SplashActivity.this, MainActivity.class);
    switch (v.getId()) {
        case R.id.enter_button:

            startActivity(intent);
            break;
        case R.id.book_button:

            intent.putExtra("source","onClick");
            startActivity(intent);
            break;
        default:
            break;
    }
}

更正工作 MainActivity.java

onCreate方法中(输入与您相关的bottomBar的tab位置):

        Intent intent = getIntent();
        String source = intent.getStringExtra("source");
        if (source != null && source.equals("onClick")) {
            bottomBar.selectTabAtPosition(4);
        }

祝你好运!

因为你用这个:

getSupportFragmentManager().beginTransaction()
            .add(R.id.fragment_container, firstFragment).commit();

它将显示 firstFragment 默认值

你可以试试这个:

在 Spalsh Activity

Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);

为意图添加一些参数

Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.putExtra("source","onClick");   //add like this line
startActivity(intent);

主要Activity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ```your code

    Intent intent = getIntent();
    String source = intent.getStringExtra("source");
    if (source.equals("onClick")) {
        bottomBar.onTabSelected(R.id.tab_book);
    }
}

当 Main Activity 接受参数 source 并且 source 值是您的设置时,它将 运行 if[= 中的代码18=]