【问题标题】:How do i fix overlapping fragments如何修复重叠的片段
【发布时间】:2022-01-10 12:49:21
【问题描述】:

我有一个顶栏和一个底栏。我想从顶部菜单到某些地方,从底部菜单到某些地方。但这两个部分相互重叠,我该如何在片段中解决这个问题。我制作了 Twitter 样式的底部和顶部组件,但是片段被覆盖了。

我搜索了片段删除代码,但找不到。

你能告诉我哪里出错了吗?

谢谢。

FeedActivity2.kt

package com.ager.sutra

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.navigation.Navigation
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.NavigationUI
import com.ager.sutra.databinding.ActivityFeed2Binding
import com.google.android.material.navigation.NavigationView
import com.ager.sutra.fragments.HomeFragment
import com.ager.sutra.fragments.MessageFragment
import com.ager.sutra.fragments.ProfileFragment
import com.ager.sutra.fragments.SearchFragment


class FeedActivity : AppCompatActivity() {

private lateinit var binding : ActivityFeed2Binding
private lateinit var fragmentLane : Fragment
private val homeFragment = HomeFragment()
private val searchFragment = SearchFragment()
private val messageFragment = MessageFragment()

override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)
    binding = ActivityFeed2Binding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view)



    val drawerLayout : DrawerLayout = findViewById(R.id.drawerLayout)

    binding.imageMenu.setOnClickListener(View.OnClickListener {

        drawerLayout.openDrawer(GravityCompat.START) })

    val navView : NavigationView = findViewById(R.id.navigationView)


    val navController : NavController = 
    Navigation.findNavController(this,R.id.navHostFragment)

    try {
        NavigationUI.setupWithNavController(navView, navController)
    }catch (e : Exception){
        println(e.localizedMessage)
    }



    val bottomNav = binding.bottomNavigation
    bottomNav.setOnItemSelectedListener {
        when(it.itemId){
            R.id.bottom_home -> makeCurrentFragment(homeFragment)
            R.id.bottom_search -> makeCurrentFragment(searchFragment)
            R.id.bottom_messages -> makeCurrentFragment(messageFragment)
        }
        true
    }


}

private fun makeCurrentFragment(fragment: Fragment) =

    supportFragmentManager.beginTransaction().apply{
        replace(R.id.navHostFragment, fragment)
        commit()
    }

}

activity_feed2.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawerLayout"
tools:context=".FeedActivity"
>

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/layoutToolBar"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="@color/darkGray"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:paddingStart="15dp"
        android:paddingEnd="15dp"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@+id/imageMenu"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:contentDescription="@string/app_name"
            android:src="@drawable/ic_baseline_menu_24"
            app:tint="@color/white" />
        
        <TextView
            android:id="@+id/textTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="15dp"
            android:text="@string/app_name"
            android:textColor="@color/yellow"
            android:textSize="20sp"
            android:textStyle="bold"/>

    </LinearLayout>

    <fragment
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/layoutToolBar"
        app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
        android:id="@+id/navHostFragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        app:defaultNavHost = "true"
        app:navGraph="@navigation/main"
        app:background="@color/darkGray"
        />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/darkGray"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:itemRippleColor="@android:color/transparent"
        app:itemIconSize="24dp"
        app:labelVisibilityMode="unlabeled"
        app:itemIconTint="@drawable/bottom_itemselector"
        app:menu="@menu/bottom_menu"
        >

    </com.google.android.material.bottomnavigation.BottomNavigationView>


</androidx.constraintlayout.widget.ConstraintLayout>

<com.google.android.material.navigation.NavigationView
    android:id="@+id/navigationView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:menu="@menu/nav_menu"
    app:headerLayout="@layout/nav_header"
    android:layout_gravity="start"/>

</androidx.drawerlayout.widget.DrawerLayout>

ma​​in.xml(导航)

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
app:startDestination="@+id/nav_home">

<fragment
    android:id="@+id/nav_home"
    android:name="com.ager.sutra.fragments.HomeFragment"
    android:label="Home"
    tools:layout="@layout/fragment_home" />
<fragment
    android:id="@+id/nav_profile"
    android:name="com.ager.sutra.fragments.ProfileFragment"
    android:label="Profile"
    tools:layout="@layout/fragment_profile" />
<fragment
    android:id="@+id/nav_settings"
    android:name="com.ager.sutra.fragments.SettingsFragment"
    android:label="Settings"
    tools:layout="@layout/fragment_settings" />
<fragment
    android:id="@+id/messageFragment"
    android:name="com.ager.sutra.fragments.MessageFragment"
    android:label="Message"
    tools:layout="@layout/fragment_message" />
</navigation>

【问题讨论】:

    标签: android android-studio kotlin android-fragments


    【解决方案1】:

    您需要在 NavigationController 上进行设置。 魔法发生在下面 =)

    setSupportActionBar(binding.appBarMain.toolbar);
    DrawerLayout drawer = binding.drawerLayout;
        NavigationView navigationView = binding.navView;
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
                .setOpenableLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);
    

    另外,不要忘记 OnSupportNavigateUp 来处理抽屉布局图标点击

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-25
      • 2018-10-13
      • 1970-01-01
      • 2017-08-22
      • 2020-11-23
      • 2014-03-05
      • 1970-01-01
      相关资源
      最近更新 更多