Как отобразить фрагмент, не нажимая на него

#java #android #kotlin #android-fragments #android-tablayout

Вопрос:

У меня есть таблица с двумя вкладками, в коде я написал, что вкладки отображались, когда я нажимал на них. Теперь это работает следующим образом: я открываю действие, и фрагменты из таблицы не отображаются, пока я не нажму на заголовок заголовка таблицы. Как я могу сделать так, чтобы, когда я открываю фрагмент действия, он уже был виден?

 

public class DetailActivity extends AppCompatActivity {

    FrameLayout simpleFrameLayout;
    TabLayout tabLayout;
    ImageView onBackPressed;

    Button subsButton;


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


        if (getSupportActionBar() != null) {
            getSupportActionBar().hide();
        }


        subsButton = findViewById(R.id.subsButton);

        subsButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                if (subsButton.getText().equals("Подписаться")) {

                    subsButton.setText("Отписаться");
                    subsButton.setBackgroundColor(subsButton.getContext().getResources().getColor(R.color.colorGrey));


                } else if (subsButton.getText().equals("Отписаться")) {
                    subsButton.setText("Подписаться");
                    subsButton.setBackgroundColor(subsButton.getContext().getResources().getColor(R.color.colorPrimary));

                }

            }
        });


        simpleFrameLayout = (FrameLayout) findViewById(R.id.simpleFrameLayout);
        tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);

        onBackPressed = (ImageView) findViewById(R.id.onBackPressed);

        tabLayout.selectTab(tabLayout.getTabAt(0));

        TabLayout.Tab firstTab = tabLayout.newTab();
        firstTab.setText("Chelsea");
        tabLayout.addTab(firstTab);


        TabLayout.Tab secondTab = tabLayout.newTab();
        secondTab.setText("Manchester City");
        tabLayout.addTab(secondTab);


        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {


            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                Fragment fragment = null;
                switch (tab.getPosition()) {
                    case 0:
                        fragment = new FragmentHisOne();
                        break;
                    case 1:
                        fragment = new FragmentHisTwo();
                        break;
                    default:
                        fragment = new FragmentHisOne();
                        break;
                }
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.simpleFrameLayout, fragment);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                ft.commit();

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {


            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }


    public void onBackPressed(View view) {
        Intent intent = new Intent(view.getContext(), MainActivity.class);
        view.getContext().startActivity(intent);
    }



 

Ответ №1:

Вы выбираете вкладку, даже не добавляя ее раньше. TabLayout.selectTab(TabLayout.getTabAt(0)); Переместите этот код после добавления вкладок.

Ответ №2:

Дело в том, что я не создавал фрагмент по умолчанию заранее, до создания вкладок TabLayout. Мое решение:

 FrameLayout simpleFrameLayout;
    TabLayout tabLayout;
    ImageView onBackPressed;

    Button subsButton;

    Fragment fragment = null;
    FragmentManager fragmentManager;
    FragmentTransaction fragmentTransaction;


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


        if (getSupportActionBar() != null) {
            getSupportActionBar().hide();
        }


        subsButton = findViewById(R.id.subsButton);

        subsButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                if (subsButton.getText().equals("Подписаться")) {

                    subsButton.setText("Отписаться");
                    subsButton.setBackgroundColor(subsButton.getContext().getResources().getColor(R.color.colorGrey));


                } else if (subsButton.getText().equals("Отписаться")) {
                    subsButton.setText("Подписаться");
                    subsButton.setBackgroundColor(subsButton.getContext().getResources().getColor(R.color.colorPrimary));

                }

            }
        });


        simpleFrameLayout = (FrameLayout) findViewById(R.id.simpleFrameLayout);
        tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);

        onBackPressed = (ImageView) findViewById(R.id.onBackPressed);

        tabLayout.selectTab(tabLayout.getTabAt(0));

        TabLayout.Tab firstTab = tabLayout.newTab();
        firstTab.setText("Chelsea");
        tabLayout.addTab(firstTab);


        TabLayout.Tab secondTab = tabLayout.newTab();
        secondTab.setText("Manchester City");
        tabLayout.addTab(secondTab);

        fragment = new FragmentHisOne();
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.simpleFrameLayout, fragment);
        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        fragmentTransaction.commit();

        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {


            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                Fragment fragment = null;
                switch (tab.getPosition()) {
                    case 0:
                        fragment = new FragmentHisOne();
                        break;
                    case 1:
                        fragment = new FragmentHisTwo();
                        break;
                    default:
                        fragment = new FragmentHisOne();
                        break;
                }
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.simpleFrameLayout, fragment);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                ft.commit();

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {


            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }


    public void onBackPressed(View view) {
        Intent intent = new Intent(view.getContext(), MainActivity.class);
        view.getContext().startActivity(intent);
    }

    public void subsButton(View view) {
        //Button.setBackground
    }