Проверить содержимое RecyclerView - PullRequest
0 голосов
/ 09 мая 2019

Я думаю, что нет необходимости повторять точное описание того, как установлен мой RecyclerView.Это описано здесь: Android - RecyclerView с различным динамическим контентом, отличающимся для каждого элемента

Короче говоря, мой Recycler View может содержать различные элементы управления, такие как редактирование текста, спиннер и т. Д. Затем,Recyclelerview помещается в макет Activity и всегда расширяется с помощью вложенного представления прокрутки в качестве родительского.Когда пользователь нажимает кнопку «Подтвердить» в моем действии, содержимое представления переработчика должно быть проверено - например, если какой-то конкретный элемент содержит текстовое представление, которое должно быть непустым, действие не должно быть завершено и должна отображаться стандартная отметка ошибки внутри этого конкретного текста редактирования..

В моем представлении рециркулятора я создал метод validate, и он должен вернуть true или false, чтобы я знал результат проверки.Тем не менее, я не знаю, как получить доступ к содержимому конкретного элемента повторного просмотра из адаптера, это мой метод (в данном случае, отредактируйте текстовый элемент управления с типом, установленным на электронную почту):

public boolean validate()
    {
        for(Object item : items)
        {
            Parameter p = (Parameter)item;

            switch (p.type)
            {
                case Parameter.EMAIL_PARAM:
                {

                    String email = ((EmailParameter)p).value;
                    /*validate email here, if invalid, return
                     false and set error indicatior for corresponding 
                     recyclerview item*/

                }
            }
        }


        return true;
    }

items is List<Object> и содержит все элементы просмотра повторного просмотра с различными фактическими типами, каждый тип определяет конкретный отображаемый контент повторного просмотра.Когда пользователь меняет элемент управления конкретного элемента, соответствующий элемент из items будет соответственно обновляться, поэтому при вызове validate все элементы содержат свежие данные (в случае EmailParameter это будет поле value, уже настроенное на набранный текств редактировании текстового элемента управления).

Поскольку я могу легко проверить окончательные значения, я не знаю, как обновить соответствующий элемент управления представлением рециркулятора, чтобы показать ошибку.

Есть ли у вас какие-либо идеи?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Рабочий раствор - используйте notifyDatasetChanged:

public boolean validate()
    {
        boolean allValid = true;

        for(Object item : items)
        {
            Parameter p = (Parameter)item;

            switch (p.type)
            {
                case Parameter.EMAIL_PARAM:
                {

                    String email = ((EmailParameter)p).value;
                    /*validate email here, if invalid, return
                     false and set error indicatior for corresponding 
                     recyclerview item*/

                    p.errorMessage = valid ? null:"Email is incorrect";
                    allValid &= valid;

                    break;

                }
               /*All remaining parameter types validaion*/
            }



        }


         if(!allValid) this.notifyDataSetChanged();
         return allValid;
    }
0 голосов
/ 09 мая 2019

Может быть, эта библиотека - то, что вам нужно https://github.com/Link184/KidAdapter

Вот краткий пример того, как вы можете проверять данные:

val adapter : TypedKidAdapter = recyclerView.setUp {
    withViewType {
        withItems(mutableListOf("one", "two"))
        withLayoutResId(android.R.layout.list_content)
        withContentComparator<String> { oldObject, newObject ->
            insertNewViewType(newItems)
            oldObject.compareTo(newObject)
        }
        withItemsComparator<String> { oldObject, newObject ->
            oldObject.equals(newObject).also {
                updateItemsFromViewType(someNewItems)
            }
        }
        bind<String> {
            //ui logic
        }
    }

    withViewType {
        //another viewtype config
    }
}

fun insertNewViewType(newItems: MutableList<Any>) {
    adapter restructure {
        insertTop {
            withItems(newItems)
            withLayoutResId(android.R.layout.list_content)
            withItemsComparator<Any> {
                ...
            }
            bind<Any> { 
                //UI logic
            }
        }
    }
}

fun updateItemsFromViewType(newItems: String) {
    adapter update {
        insertBottom(newItems)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...