0

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: application screenshot

The Fragment named ChatFragment has other fragment MessageFragment to show a list of Message: enter image description here

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)
    }
}
Adrian David Smith
  • 574
  • 1
  • 4
  • 26
Sueezen
  • 1
  • 1

0 Answers0