java - 我可以从底部栏单击侦听器打开片段吗?
问题描述
我创建了一个带有 xml 文件的底部栏,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<tabs>
<tab
id="@+id/tab_signals"
icon="@drawable/ic_recents"
title="Signals"
barColorWhenSelected="@color/colorAccent" />
<tab
id="@+id/tab_tutorials"
icon="@drawable/ic_favorites"
title="Tutorials"
barColorWhenSelected="#5D4037" />
<tab
id="@+id/tab_training"
icon="@drawable/ic_nearby"
title="Training"
barColorWhenSelected="#7B1FA2" />
<tab
id="@+id/tab_management"
icon="@drawable/ic_friends"
title="Management"
barColorWhenSelected="#FF5252" />
<tab
id="@+id/tab_pool"
icon="@drawable/ic_restaurants"
title="Pool"
barColorWhenSelected="#FF9800" />
<tab
id="@+id/tab_contact"
icon="@drawable/ic_restaurants"
title="Contact"
barColorWhenSelected="#FF9800" />
</tabs>
我的 activity_main.xml 如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/messageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomBar"
android:gravity="center"
android:text="Hi mom!" />
<com.roughike.bottombar.BottomBar
android:id="@+id/bottomBar"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_alignParentBottom="true"
app:bb_tabXmlResource="@xml/bottombar_tabs_color_changing"
app:bb_behavior="shifting|underNavbar" />
</RelativeLayout>
MainActivity.class 如下:
public class MainActivity extends AppCompatActivity {
private TextView messageView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
messageView = (TextView) findViewById(R.id.messageView);
BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar);
bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelected(@IdRes int tabId) {
messageView.setText(TabClicks.get(tabId, false));
}
});
bottomBar.setOnTabReselectListener(new OnTabReselectListener() {
@Override
public void onTabReSelected(@IdRes int tabId) {
Toast.makeText(getApplicationContext(), TabClicks.get(tabId, true), Toast.LENGTH_LONG).show();
}
});
}
}
另一个 TabClicks.java 具有点击监听器,如下所示:
package com.example.bottombar.sample;
public class TabClicks {
public static String get(int menuItemId, boolean isReselection) {
String message = "Content for ";
switch (menuItemId) {
case R.id.tab_signals:
message += "signals";
break;
case R.id.tab_tutorials:
message += "tutorials";
break;
case R.id.tab_training:
message += "training";
break;
case R.id.tab_management:
message += "management";
break;
case R.id.tab_pool:
message += "pool";
break;
case R.id.tab_contact:
message += "contact";
break;
}
if (isReselection) {
message += " WAS RESELECTED! YAY!";
}
return message;
}
}
它工作得很好,但现在我想从显示文本更改为打开片段。我希望每个项目都打开一个片段,我该如何开始,如何更改此代码?
解决方案
您可以使用它来打开/替换片段
Fragment someFragment = new SomeFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, someFragment ); // give your fragment container id in first parameter
transaction.addToBackStack(null); // if written, this transaction will be added to backstack
transaction.commit();
但是,根据 Material design 指南,底部导航应该有 3-5 个项目。你的有 6 个,我建议你使用导航抽屉。
您还可以使用导航组件查看底部导航,这使得导航和替换片段更加容易。
推荐阅读
- angular - ng serve --open 在 vs 代码上创建问题
- app-update - 违规的 Android 应用程序拒绝问题
- java - 无法在 Android 中关闭对话框
- visual-studio-code - VS Code 无法打开任何 .ipynb 的更改
- node.js - NodeJS Docker 当前与最新
- laravel - 使用 Nginx 的多个 Laravel 应用程序 - Windows
- string - How can I make my Athena SQL query faster
- html - 为什么第一个 div 内容会在顶部添加额外的填充/边距?
- python - 访问熊猫系列中的字符串
- drools - optaplanner Benchmarking failed 原因:java.lang.InstantiationError: org.drools.core.factmodel.ClassBuilderFactory