如何在不单击的情况下显示片段
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 交互的情况下从通知中打开片段页面?