Как заменить представление родительского фрагмента представлением дочернего фрагмента? - PullRequest
0 голосов
/ 04 ноября 2019

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

Прямо сейчас у меня есть родительский фрагмент, который представляет собой список чата, и дочерний фрагмент (экран чата), который отображается при нажатии на элемент экрана чата (т.е. кнопка). Список чатов выглядит следующим образом:

<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"
    tools:context="com.example.myapplication.ChatListFragment">

    <!-- Empty Container for Fragment to Live in -->
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ListView
        android:id="@+id/chatListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/moonstone">
    </ListView>

</FrameLayout>

Chat List Screen

Я настроил onClickListener для chatListView следующим образом:

_chatListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {


                String chatName = _chatListAdapter.getItem(i).getChatTitle();

                openChatScreen(chatName);
            }
        });

И openChatScreenWindow () выглядит следующим образом:

private void openChatScreen(String chatName)
    {
        _fragmentManager = getChildFragmentManager();

        Log.i(CHAT_LIST_TAG, "starting chat screen fragment");

        FragmentTransaction fragmentTransaction = _fragmentManager.beginTransaction();

        ChatScreenFragment chatScreenFragment = ChatScreenFragment.newInstance(chatName);
        fragmentTransaction.add(R.id.fragment_container, chatScreenFragment);
        fragmentTransaction.addToBackStack(GlobalConstants.OPEN_CHAT_WINDOW_FRAGMENT_STRING + chatName);

        fragmentTransaction.commit();
    }

Однако, когда я запускаю этот код, дочерний фрагмент затемняется, потому что как макет кадра (представление, в котором отображается фрагмент), так иДля chatListView их ширина и высота установлены на match_parent (я выяснил это, проверив высоту и ширину списка чатов как 200dp, и я смог увидеть дочерний фрагмент за ним).

Есть липростой способ получить фрагмент для замены chatListView всякий раз, когда он загружается?

Например, есть ли способ изменить это представление:

Chat List Screen

На это:

Chat Screen

... когда щелкается элемент списка чата (первый)?

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

Пожалуйста, дайте мне знать, что вы думаете, спасибо!

1 Ответ

0 голосов
/ 04 ноября 2019

Прежде всего, самый современный способ управления фрагментами - Компонент навигации

В соответствии с вашим подходом - вы добавляете дочерний фрагмент поверх предыдущего фрагмента с помощью fragmentTransaction.add, вы можете использоватьfragmentTransaction.replace instead

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

Моя рекомендация - уделять больше времени изучению компонента навигации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...