如何在不单击的情况下显示片段

Posted

技术标签:

【中文标题】如何在不单击的情况下显示片段【英文标题】:How to display a fragment without clicking on it 【发布时间】:2021-11-17 19:50:04 【问题描述】:

我有一个带有两个选项卡的表格布局,在我编写的代码中,当我单击它们时会显示这些选项卡。现在它的工作原理是这样的:我打开活动,并且在单击 TabLayout 标题的标题之前,不会显示来自 TabLayout 的片段。我怎样才能使它在我打开 Activity - Fragment 时已经可见?



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
    

【讨论】:

以上是关于如何在不单击的情况下显示片段的主要内容,如果未能解决你的问题,请参考以下文章

如何在不单击按钮的情况下运行 onCreate() 中的方法

如何在不锁定活动方向的情况下锁定片段方向?

如何在不复制片段的情况下传递道具

如何在不与 MainActivity 交互的情况下从通知中打开片段页面?

如何在不下载整个片段的情况下使用媒体源缓冲区和分段 mp4 在特定时间启动视频?

如何在不将图像保存在本地的情况下将捕获的图像(Surface View)传递给另一个片段?