Структура кадра занимает экран и скрывает нижнюю навигацию и панель инструментов - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь изменить текущие настройки использования компонента навигации Android на классический менеджер фрагментов, потому что компонент навигации дает мне много ограничений, с которыми я не могу обойтись.

Я столкнулся сОднако проблема возникает, когда я начинаю транзакцию, чтобы показать фрагмент в макете моего фрейма, внезапно он переходит внизу навигации и панель инструментов больше не отображается.Я пробовал разные вещи, но не могу найти решение, почему это происходит.

Это макет моей деятельности:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        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:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".FeedActivity"
android:orientation="vertical">


    <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:theme="@style/MyActionBar"
            android:minHeight="?attr/actionBarSize"
            android:id="@+id/my_toolbar"/>

    <include
            layout="@layout/content_main"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/feed_bottom_nav"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="?android:attr/windowBackground"

            app:itemBackground="@color/white"
            app:itemTextColor="@color/bottom_nav_color"
            app:itemIconTint="@color/bottom_nav_color"
            app:menu="@menu/navigation"
            app:labelVisibilityMode="unlabeled"/>

    </LinearLayout>

Это макет content_main, который я включаю:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
             tools:context="FeedActivity"
             app:layout_behavior=""
             tools:showIn="@layout/activity_feed"
             android:padding="1dp"
             android:id="@+id/feed_frame_container">

</FrameLayout>

и это мой класс активности:

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.Menu
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import co.getdere.Fragments.FeedFragment
import co.getdere.Fragments.ImageFullSizeFragment
import co.getdere.Fragments.ProfileRandomUserFragment
import co.getdere.Models.Images
import co.getdere.Models.Users
import co.getdere.RegisterLogin.RegisterActivity
import co.getdere.ViewModels.SharedViewModelCurrentUser
import co.getdere.ViewModels.SharedViewModelImage
import co.getdere.ViewModels.SharedViewModelRandomUser
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.firebase.FirebaseApp
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.database.ValueEventListener


class FeedActivity : AppCompatActivity() {

    lateinit var mToolbar: Toolbar
    lateinit var mBottomNav: BottomNavigationView

    var imageFullSizeFragment = ImageFullSizeFragment()
    var feedFragment = FeedFragment()
    var randomProfileNavHostFragment = ProfileRandomUserFragment()

    val fm = supportFragmentManager
    var active = feedFragment


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_feed)

        FirebaseApp.initializeApp(this)
        checkIfLoggedIn()


        mToolbar = findViewById(R.id.my_toolbar)
        setSupportActionBar(mToolbar)

        mBottomNav = findViewById(co.getdere.R.id.feed_bottom_nav)

        mBottomNav.setOnNavigationItemSelectedListener { item ->
            when (item.itemId) {

                co.getdere.R.id.destination_board -> {

                    val intent = Intent(this, BoardActivity::class.java)
                    startActivity(intent)
                }
                R.id.destination_profile_logged_in_user -> {

                    val intent = Intent(this, ProfileActivity::class.java)
                    startActivity(intent)
                }

                R.id.destination_feed -> {

                    val intent = Intent(this, ProfileActivity::class.java)
                    startActivity(intent)
                }
            }
            false
        }


        fm.beginTransaction().add(R.id.feed_frame_container, imageFullSizeFragment, "imageFullSizeFragment").hide(imageFullSizeFragment).commit()
        fm.beginTransaction().add(R.id.feed_frame_container, randomProfileNavHostFragment, "randomProfileNavHostFragment").hide(randomProfileNavHostFragment).commit()
        fm.beginTransaction().add(R.id.feed_frame_container, feedFragment, "feedFragment").commit()

    }


    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(co.getdere.R.menu.feed_navigation, menu)
        return super.onCreateOptionsMenu(menu)
    }

    private fun checkIfLoggedIn() {

        val uid = FirebaseAuth.getInstance().uid
        if (uid == null) {
            val intent = Intent(this, RegisterActivity::class.java)
            intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
            startActivity(intent)
        } else {
            fetchCurrentUser()
        }

    }

    private fun fetchCurrentUser() {

        val uid = FirebaseAuth.getInstance().uid
        val ref = FirebaseDatabase.getInstance().getReference("/users/$uid/profile")
        ref.addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onCancelled(p0: DatabaseError) {
            }

            override fun onDataChange(p0: DataSnapshot) {


                sharedViewModelCurrentUser.currentUserObject = p0.getValue(Users::class.java)!!
                Log.d("checkLocation", "fetchCurrentUser")

            }

        })
    }


    companion object {
        fun newInstance(): FeedActivity = FeedActivity()
    }
}

Если я запускаю приложение прямо сейчас, фрагмент внутри макета кадра занимает весь экран, но если я уберу ихлинии:

        fm.beginTransaction().add(R.id.feed_frame_container, imageFullSizeFragment, "imageFullSizeFragment").hide(imageFullSizeFragment).commit()
        fm.beginTransaction().add(R.id.feed_frame_container, randomProfileNavHostFragment, "randomProfileNavHostFragment").hide(randomProfileNavHostFragment).commit()
        fm.beginTransaction().add(R.id.feed_frame_container, feedFragment, "feedFragment").commit()

Я снова вижу верхнюю панель и нижнюю панель навигации.Есть идеи, что происходит?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Оказалось, что у одного из добавленных мною фрагментов была функция, задача которой заключалась в том, чтобы скрыть оба этих элемента, поэтому после того, как я добавил этот фрагмент в диспетчер фрагментов, они были невидимы независимо от того, активен ли этот фрагмент или нет. нет.

0 голосов
/ 02 апреля 2019

Попробуйте изменить атрибуты <include> тега android: layout * в макете вашей активности на:

<include
        layout="@layout/content_main"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
...