Сортировка фрагментов в ListView - PullRequest
0 голосов
/ 04 марта 2020

В настоящее время я использую LinearLayout для отображения списка представлений фрагментов, но я хочу иметь возможность сортировать их по одному из параметров представления фрагментов. Это может быть текстовое поле, но оно находится внутри макета ограничения. Макет ограничения является контейнером для фрагмента.

<?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/clPostcode"
    ... >
    <TextView
        android:id="@+id/tvPostcodeName"
        ... />
    <TextView
        android:id="@+id/tvPostcodeCity"
        ... />

</androidx.constraintlayout.widget.ConstraintLayout>

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

TransactionManager не может поместить их в ArrayAdapter для сортировки.

Есть ли другой вариант?

1 Ответ

0 голосов
/ 04 марта 2020

Решил проблему путем подкласса ArrayAdapter. Мне пришлось написать свой собственный конструктор для создания фрагментов, используя FragmentManager.

public FragmentManager(... T[] fragments){

    FragmentTransaction ft = activity.getSupportFragmentManager()
            .beginTransaction();
    for (int i = 0; i < fragments.length; i++){
        Fragment fragment = fragments[i];
        //Do what ever you need to do to your fragment instance
        ft.add(fragment, fragment.getSomeUniqueString());
        mObjects.add(fragment);
    }
    ft.commit();
}

и getView as:

@Override
public View getView(int position, View convertView, ViewGroup parent){
    Fragment fragment = mObjects.get(position);
    ... // checking left off to save space
    view = fragment.getRootView();
    ... // checking left off to save space
    return view;
}

А затем сортировка должна знать о структуре класса фрагмента .

Я думаю, что это также можно сделать, только сохранив список SomeUniqueString и используя его для поиска ViewViewByTag в FragmentManager. Это будет следующая проблема.

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