Конкатенация строк Groovy

Хорошо, у меня есть ответ. Это было на самом деле проще, чем я ожидал, но это требует некоторой хитрости. Во-первых, позвольте мне начать с настройки. Допустим, например, у вас есть три страницы (A-B-C), которые вы просматриваете в ViewPager. И вы хотите настроить его так, чтобы, если вы продолжаете прокручивать на C (стр. 3), он переходит к A (стр. 1), а если вы прокручиваете назад на A (стр. 1), он переходит к C (стр. 3). ).

Я не говорю, что мое решение является лучшим, но оно работает, и я не вижу никаких проблем. Во-первых, вы должны создать две «поддельные» страницы. Поддельные страницы представляют первую и последнюю страницы вашего ViewPager. Следующее, что вам нужно, это настроить onPageChangeListener () и использовать метод onPageSelected (). Причина, по которой вам нужны поддельные страницы, заключается в том, что onPageSelected () регистрируется только после того, как вы переместились (сильно ударили). Другими словами, без этого метода конечный пользователь должен был бы перейти к странице 2 и вернуться к странице 1, чтобы получить попадание на страницу 1, что также означает, что страница 1 будет пропущена в зависимости от логики вашего кода.

Установка действительно весь ответ. После того, как у вас есть поддельные страницы, нужно просто использовать setCurrentItem () внутри необходимого метода.

Вот как выглядит мой код. Обязательно поместите это внутри вашего публичного метода Object instantiateItem (конечный контейнер ViewGroup, конечная позиция int), непосредственно перед возвратом своего представления внутри вашего контейнера.

((ViewPager) container).setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                Log.d(TAG, "onPageSelected() :: " + "position: " + position);

                // skip fake page (first), go to last page
                if (position == 0) {
                    ((ViewPager) container).setCurrentItem(118, false);
                }

                // skip fake page (last), go to first page
                if (position == 119) {
                    ((ViewPager) container).setCurrentItem(1, false); //notice how this jumps to position 1, and not position 0. Position 0 is the fake page!
                }

            }

Вот и все, он делает свое дело! Единственное, что нужно сделать - запустить ViewPager с позиции 1 (это вторая страница: поддельная страница = pg 1, моя настоящая стартовая страница = pg 2). Теперь, каждый раз, когда я прокручиваю на поддельную страницу, я перенаправляю ее назад на последнюю реальную страницу. И каждый раз, когда я прокручиваю вперед до последней фальшивой страницы, я перенаправляю ее на настоящую стартовую страницу (стр. 2).

Кроме того, не пытайтесь поместить какой-либо код в onPageScrollStateChanged. Этот метод причудливый, кажется, что значение состояния неуправляемо. Он постоянно прыгает из одного состояния в другое. Даже без прокрутки. Это всего лишь совет, который я подобрал.

6
задан cdeszaq 11 December 2013 в 15:49
поделиться

2 ответа

Я думаю, что в Groovy это может быть намного проще, чем принятый в настоящее время ответ. Методы collect и join созданы для такого рода вещей. Join автоматически выполняет конкатенацию, а также не ставит запятую в конце строки

def names = row.column.collect { it.attributes()['name'] }.join(",")
def values = row.column.collect { it.values() }.join(",")
def result = "INSERT INTO tablename($names) VALUES($values)"
18
ответ дан 8 December 2019 в 13:01
поделиться

Вы можете просто использовать два StringBuilder. Что-то вроде этого, грубое и непроверенное:

def columns = new StringBuilder("Insert INTO tablename(")
def values = new StringBuilder("VALUES (")
row.column.each() { column ->
    columns.append(column.attributes()['name'])
    columns.append(", ")
    values.append(column.value())
    values.append(", ")
}
// chop off the trailing commas, add the closing parens
columns = columns.substring(0, columns.length() - 2)
columns.append(") ")
values = values.substring(0, values.length() - 2)
values.append(")")

columns.append(values)
def result = columns.toString()

Вы можете найти все виды операторов Groovy-манипуляций со строками здесь .

0
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: