Страницы

Поиск по вопросам

Показаны сообщения с ярлыком gridview. Показать все сообщения
Показаны сообщения с ярлыком gridview. Показать все сообщения

понедельник, 24 февраля 2020 г.

Как вывести вместо числа название категории Yii2? GridView

#php #yii2 #gridview


Имеется GridView, но категории выведены в виде цифр. Как вывести названия из другой
таблицы - категорий вместо этих цифр по связи Category_id-Title? Очень трудно дается Yii2.



Что мне нужно прописать в коде? Я пробовал по-разному, и тут брал, и тут. Но всё
оканчивалось ошибками. Спасибо за помощь!

    


Ответы

Ответ 1



[ 'attribute' => 'category_id', 'filter' => Html::activeDropDownList( $searchModel, 'category_id', ArrayHelper::map(Category::find()->all(), 'id', 'name'), ['class' => 'form-control'] ), 'value' => 'category.name', ] Вот такой метод ещё работает, на фильтр не обращайте внимания, я про 'value' => 'category.name'. Не знаю красивее ли это, чем в предыдущем варианте, но я сам новенький. Работает так, подскажет может кто из бывалых в чем разница?

Ответ 2



Требуется для начала определить связи в модели, например, у Вас есть модели для таблиц Category и Data, тогда в модели category будет такой метод: public function getData() { return $this->hasOne(Data::className(), ['id' => 'data_id']); } Подробнее тут расжёвано про Active Record. Далее, мы можем непосредственно в GridView настроить собственный столбец: $dataProvider, 'filterModel' => $searchModel, 'columns' => [ [ 'attribute' => 'id', 'value' => function ($model, $key, $index, $widget) { return $model->data->title; }, 'format' => 'raw', ], ], ]); Возможно, я что-то и упустил из виду или не совсем верно понял, что вы хотите добиться, но советую почитать документацию на гитхабе, где всё довольно хорошо расжёвано. Успехов в изучении.

суббота, 11 января 2020 г.

Таблица с разной шириной колонок (GridView)

#android #gridview #разметка


возникла такая проблема: есть таблица(GridView) в которую из БД предаются данные
и у неё все ячейки одинакового размера. Как сделать что бы первый столбец занимал половину
экрана, а остальные два всё оставшееся место? Если для GridView это сделать не возможно,
то какие другие таблицы можно использовать(но что бы ячейки были нажимаемыми)?
   
    


Ответы

Ответ 1



Kotlin: var COLS:Int = 3; var tblLayout = findViewById(R.id.tableLayout)as TableLayout tblLayout.removeAllViews() var SCV=scrollView while(i

воскресенье, 7 июля 2019 г.

Как в GridView при длинном тапе на элементе - плавно изменить размеры всех дочерних элементов

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

Пробовал делать анимацию на элемент - но срабатывает только на первом элементе, несмотря на то, на какой элемент нажимаю.
Сам GridView через Adapter и Holder наполняется элементами:



На элементах прикручены слушатели:
ticketsGrid.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override public boolean onItemLongClick(AdapterView parentLong, View viewLong, int positionLong, long idLong) { return true; } });
и:
ticketsGrid.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView parentShort, View viewShort, final int positionShort, long idShort) {
return true; } });
Может есть готовые библиотеки или кто-то уже делал такое?


Ответ

Делал для GridLayout через анимацию веса и такой класс:
public class WeightAnimation implements Animator.AnimatorListener { public static final int DURATION = 500; private ValueAnimator va;
WeightAnimation(float from, float to, final View view) { va = ValueAnimator.ofFloat(from, to); //fromWeight, toWeight va.setDuration(DURATION); va.setInterpolator(new LinearInterpolator()); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { ((LinearLayout.LayoutParams) view.getLayoutParams()).weight = (float) animation.getAnimatedValue(); view.requestLayout(); } }); va.addListener(this); }
public void startAnimation() { va.start(); }
@Override public void onAnimationStart(Animator animation) {
}
@Override public void onAnimationEnd(Animator animation) { //код по окончанию анимации }
@Override public void onAnimationCancel(Animator animation) {
}
@Override public void onAnimationRepeat(Animator animation) {
} }
Использование, где нужно:
void collapseAnimation(final View view, final boolean isCollapsing) { WeightAnimation wa = new WeightAnimation(isCollapsing ? 1f : 0f, isCollapsing ? 0f : 1f, view); wa.startAnimation(); }
Передаете все ваши View, для нужного isCollapsing=false, для остальных = true
По прежнему остается вопрос быстродействия, особенно, если у вас много View. Но на небольшое их количество работает стабильно.
Если отслеживать анимацию не нужно - implements и animationListener'ы можно удалить.