Android 片段事务问题(默认片段显示两次)
我正在使用底部栏处理片段事务。在我的应用程序中,默认的片段显示两次,当选择第二个片段时,它不会隐藏Android 片段事务问题(默认片段显示两次),android,android-fragments,fragment,android-fragmentactivity,fragmentmanager,Android,Android Fragments,Fragment,Android Fragmentactivity,Fragmentmanager,我正在使用底部栏处理片段事务。在我的应用程序中,默认的片段显示两次,当选择第二个片段时,它不会隐藏 public class MainActivity extends AppCompatActivity { private Fragment fragment; private FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCre
public class MainActivity extends AppCompatActivity {
private Fragment fragment;
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
fragment = new FragmentOne();
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.output, fragment).commit();
BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar);
bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelected(@IdRes int tabId) {
switch (tabId){
case R.id.tab_favorites:
Toast.makeText(MainActivity.this, "FAV", Toast.LENGTH_SHORT).show();
fragment = new FragmentOne();
break;
case R.id.tab_friends:
Toast.makeText(MainActivity.this, "FRIEND", Toast.LENGTH_SHORT).show();
fragment = new FragmentTwo();
break;
case R.id.tab_nearby:
Toast.makeText(MainActivity.this, "NEAR", Toast.LENGTH_SHORT).show();
fragment = new FragmentOne();
break;
case R.id.tab_test:
Toast.makeText(MainActivity.this, "TEST", Toast.LENGTH_SHORT).show();
fragment = new FragmentTwo();
break;
}
final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.output, fragment).commit();
}
});
bottomBar.setOnTabReselectListener(new OnTabReselectListener() {
@Override
public void onTabReSelected(@IdRes int tabId) {
}
});
}
请帮我解决这个问题
这是我的xml布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.syntax.bottomtabs.MainActivity">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:name="com.syntax.bottomtabs.FragmentOne"
android:id="@+id/output"/>
<com.roughike.bottombar.BottomBar
android:id="@+id/bottomBar"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
app:bb_tabXmlResource="@xml/bottombar_tabs_three" />
</RelativeLayout>
只需通过使用相对布局替换片段来替换xml,如下所示
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.syntax.bottomtabs.MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:id="@+id/output">
</RelativeLayout>
<com.roughike.bottombar.BottomBar
android:id="@+id/bottomBar"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
app:bb_tabXmlResource="@xml/bottombar_tabs_three" />
</RelativeLayout>
希望它能有所帮助……不要添加片段。添加一个容器,然后用片段替换它。在这里,framelayout将用作容器 您的xml代码应该是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.syntax.bottomtabs.MainActivity">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.roughike.bottombar.BottomBar
android:id="@+id/bottomBar"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
app:bb_tabXmlResource="@xml/bottombar_tabs_three" />
</RelativeLayout>
代码的其余部分:
bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
final FragmentManager fm = getFragmentManager();
@Override
public void onTabSelected(@IdRes int tabId) {
switch (tabId){
case R.id.tab_favorites:
Toast.makeText(MainActivity.this, "FAV", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentOne()).commit();
break;
case R.id.tab_friends:
Toast.makeText(MainActivity.this, "FRIEND", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentTwo()).commit();
break;
case R.id.tab_nearby:
Toast.makeText(MainActivity.this, "NEAR", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentOne()).commit();
break;
case R.id.tab_test:
Toast.makeText(MainActivity.this, "TEST", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentTwo()).commit();
break;
}
}
});
也给我们您的xml代码
bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
final FragmentManager fm = getFragmentManager();
@Override
public void onTabSelected(@IdRes int tabId) {
switch (tabId){
case R.id.tab_favorites:
Toast.makeText(MainActivity.this, "FAV", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentOne()).commit();
break;
case R.id.tab_friends:
Toast.makeText(MainActivity.this, "FRIEND", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentTwo()).commit();
break;
case R.id.tab_nearby:
Toast.makeText(MainActivity.this, "NEAR", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentOne()).commit();
break;
case R.id.tab_test:
Toast.makeText(MainActivity.this, "TEST", Toast.LENGTH_SHORT).show();
fm.beginTransaction().replace(R.id.content_frame, new FragmentTwo()).commit();
break;
}
}
});