Пропадает Фрагмент внутри фрагмента
Всем доброго времени! подскажите пожалуйста, уже всю голову сломал
суть такова:
у меня есть BottomNavigationView из 4 фрагментов,
внутри каждого фрагмента TabLayout с 2мя фрагментами
при запуске данные отображаются и при переключени Табов все норм, но когда я перехожу через BottomNavigationView то фрагменты внутри табов исчезают(именно исчезают) - подскажите как решить проблему
Код
это основное активити:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setTheme(R.style.AppTheme2)
setContentView(R.layout.activity_main)
val navView: BottomNavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(setOf(
R.id.navigation_cash_box, R.id.navigation_statistics, R.id.navigation_receipt, R.id.navigation_reports))
// setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
override fun onBackPressed() {
moveTaskToBack(true)
}
}
Это фрагмент с табами:
class CashBoxFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
retainInstance = true;
cahsBoxViewModel =
ViewModelProviders.of(this).get(CashBoxViewModel::class.java)
val root = inflater.inflate(R.layout.fragment_notifications, container, false)
val image_calendar_cash_box: ImageView = root.findViewById(R.id.image_calendar_cash_box)
val text_calendar_cash_box: TextView = root.findViewById(R.id.text_calendar_cash_box)
val spinner: Spinner = root.findViewById(R.id.spinner)
metods(image_calendar_cash_box, text_calendar_cash_box, spinner)
val sectionsPagerAdapter = activity?.supportFragmentManager?.let {
CBSPAdapterTab(activity, it) }
val viewPager: ViewPager = root.findViewById(R.id.view_pager)
val tabs: TabLayout = root.findViewById(R.id.tabs)
viewPager.adapter = sectionsPagerAdapter
tabs.setupWithViewPager(viewPager)
return root
}
АдаптерТабов:
private val TAB_TITLES = arrayOf(
R.string.tab_statistics,
R.string.tab_revenue_by_the_hour
)
class CBSPAdapterTab(private val context: FragmentActivity?, fm: FragmentManager) :
FragmentPagerAdapter(fm) {
override fun getItem(position: Int): Fragment {
var fragment: Fragment? = null
val bundle1 = Bundle()
when (position) {
0 -> {
fragment = TabStatisticsFragment()
fragment.setArguments(bundle1)
return fragment
}
1 -> {
fragment = TabRevenueByTheHourFragment()
fragment.setArguments(bundle1)
return fragment
}
else-> null!!
}
}
override fun getPageTitle(position: Int): CharSequence? {
return context?.resources?.getString(TAB_TITLES[position])
}
override fun getCount(): Int {
return 2
}
ПлейсХолдерФрагмент:
class CashPlaceholderFragment : Fragment() {
private lateinit var pageViewModel: CashPageViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
pageViewModel = ViewModelProviders.of(this).get(CashPageViewModel::class.java).apply {
setIndex(arguments?.getInt(ARG_SECTION_NUMBER) ?: 1)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_notifications, container, false)
}
companion object {
private const val ARG_SECTION_NUMBER = "section_number"
@JvmStatic
fun newInstance(sectionNumber: Int): CashPlaceholderFragment {
return CashPlaceholderFragment().apply {
arguments = Bundle().apply {
putInt(ARG_SECTION_NUMBER, sectionNumber)
}
}
}
}
}
и сами Активити, вставлю одну:
class TabRevenueByTheHourFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_cb_rbth, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val labels = ArrayList<String>()
labels.add("2017")
labels.add("2016")
labels.add("2015")
labels.add("2014")
labels.add("2013")
labels.add("2012")
val bargroup1: ArrayList<BarEntry> = ArrayList()
bargroup1.add(BarEntry(8f, 0))
bargroup1.add(BarEntry(2f, 1))
bargroup1.add(BarEntry(5f, 2))
bargroup1.add(BarEntry(20f, 3))
bargroup1.add(BarEntry(15f, 4))
bargroup1.add(BarEntry(19f, 5))
val bardataset = BarDataSet(bargroup1, "Cells")
val data = BarData(labels, bardataset)
barchart.data = data
}
xml основного активити:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu"
app:itemIconTint="@color/bottom_color_icon"
app:itemTextColor="@color/colorBlue"/>
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>
xml табов:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorWhite">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_marginTop="20dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="20dp"
android:id="@+id/about_us_toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:orientation="horizontal">
<TextView
android:id="@+id/text_data_cash_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/statistics"
android:textSize="12sp"
android:textColor="@color/colorSilverB"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<Spinner
android:id="@+id/spinner"
android:layout_marginTop="4dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="@color/colorBlack"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_data_cash_box"
android:entries="@array/array_date"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:id="@+id/image_calendar_cash_box"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_calendar"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<TextView
android:id="@+id/text_calendar_cash_box"
android:layout_marginStart="8dp"
android:textColor="@color/colorBlue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="@string/text_calendar"
android:textSize="14sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/image_calendar_cash_box"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:padding="4dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/raund_tab_backgroud">
<com.google.android.material.tabs.TabLayout
app:tabSelectedTextColor="@color/colorWhite"
app:tabTextColor="@color/colorSilverB"
app:tabBackground="@drawable/tab_selector"
app:tabMode="scrollable"
app:tabMaxWidth="280dp"
app:tabMinWidth="180dp"
android:clipToPadding="false"
app:tabIndicatorHeight="0dp"
app:tabIndicatorColor="@color/colorBlue"
android:id="@+id/tabs"
app:tabTextAppearance="@style/MyTabLayoutTextAppearance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/raund_tab_backgroud"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
xml внутри таба:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.reports.tab.fragments.TabLeftoversFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_marginTop="20dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent">
<ImageView
android:id="@+id/image_rbth_clock"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_clock"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:layout_marginStart="10dp"
android:id="@+id/total_rbth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/colorBlack"
android:text="@string/rbth"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/image_rbth_clock"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.github.mikephil.charting.charts.BarChart
android:id="@+id/barchart"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="500dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_layout"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
ранее я уже делал подобное но Табы были лишь в одном фрагменте и все работало, я сравнил это с тем что работало и они идентичны, для всех я использую отдельные Компоненты, для основных фрагментов один xml, для фрагментов внутри таба отдельные заранее приношу извинения если допустил ошибку, прошу помогите