I have a little problem with the Fragments. When I want to recover the Fragment named MessageFragment who works like a list of message for use to my webservice. To more understand, I have a bottomNavigationView
to control the pages named "Home", "Profile" and "Chat" in reality every page is a Fragment:
The Fragment named ChatFragment
has other fragment MessageFragment
to show a list of Message:
When I want to use my WebService to recover a list of Message from Server side, I muse use the MessageFragment
which is in ChatFragment
. But when I try to get the Fragment with this:
messageFragment = childFragmentManager.findFragmentById(R.id.messageFragment) as MessageFragment?
I precise the code above is executed in a Fragment Class and so I can't use supportFragmentManager
.
To solve this problem, I try to put an instance of MessageFragment
class in childFragmentManager
of ChatFragment
with this code :
childFragmentManager.beginTransaction().add(R.id.chatFragment, MessageFragment()).commit()
Log.d("childFragments = ", childFragmentManager.fragments.toString())
But I don't have any Fragments in my childFragmentManager.
I try to use setPrimaryNavigationFragment
during the replacement fragments of bottomNavigationView
:
private fun replaceFragment(fragment : Fragment) {
val fragmentManager : FragmentManager = supportFragmentManager;
val fragmentTransaction : FragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.frame_layout, fragment).setPrimaryNavigationFragment(fragment);
fragmentTransaction.commit();
}
ChatFragment 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:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:orientation="vertical"
android:layout_height="match_parent"
android:id="@+id/fragmentChat"
tools:context=".ChatFragment">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentMessage"
android:name="com.sueezen.lesnettoyeurs.MessageFragment"
android:layout_width="378dp"
android:layout_height="656dp" />
</FrameLayout>
ChatFragment Class :
package com.sueezen.lesnettoyeurs
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
/**
* A simple [Fragment] subclass.
* Use the [ChatFragment.newInstance] factory method to
* create an instance of this Fragment.
*/
class ChatFragment(session: String?, signature: String?) : Fragment() {
// TODO: Rename and change types of parameters.
var messageFragment: MessageFragment? = null
var session = session
var signature = signature
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//childFragmentManager.beginTransaction().add(R.id.fragmentChat, MessageFragment(), "MessageFragment").commit()
messageFragment = childFragmentManager.findFragmentById(R.id.messageFragment) as MessageFragment?
val pool_last : ExecutorService = Executors.newFixedThreadPool(1);
val wb_last = WebServiceLastMessage("http://51.68.124.144/nettoyeurs_srv/last_msgs.php?session=$session&signature=$signature", messageFragment?.getMessages())
val obj_last = pool_last.submit(wb_last)
val status = obj_last.get()["Status"]
Log.d("Last Messages = ", status.toString())
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this Fragment.
return inflater.inflate(R.layout.fragment_chat, container, false)
}
}