Страницы

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

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

Динамическое добавление checkbox android

Почему-то добавленный checkbox с помощью этого кода:
RelativeLayout test = (RelativeLayout)findViewById(R.id.testRelative); CheckBox checkbox = new CheckBox(this); checkbox.setText("completed"); RelativeLayout.LayoutParams RL = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); test.addView(checkbox, RL);
Имеет иной стиль вывода, чем тот, что добавлен в xml файл этого же активити:

Отличаются они только фоном. Первый имеет черный фон (тот CheckBox, что задан динамически), второй имеет стандартный синий цвет (CheckBox с XML файла). Мне необходимо, чтобы они были в одном стиле, какие поправки нужно внести, чтобы это реализовать?


Ответ

Можно сделать так. Сначала создать layout файл "chbTemplate" с чекбоксом:

потом inflate этот layout в ваш CheckBox:
CheckBox myChb = (CheckBox)getLayoutInflater().inflate(R.layout.chbTemplate, null);
Надеюсь, что это поможет.

Хранение объемных данных в viewstate asp.net

У меня есть сайт на asp.net и мне нужно хранить достаточно большие файлы, 2-4 файла каждый до 10 мб между postback'ами. Сейчас я их храню в сесиях, но админ попросил поискать решение менее требовальное к количеству оперативки на сервере.
Какие есть минусы хранения 40 мб файлов в Viewstate ? Отправляется ли viewstate в запросе с каждым постбеком, даже если она там не используется?


Ответ

Viewstate отправляется при каждом запросе и еще шифруется. Хранить в нем такие большие файлы нельзя. Для ускорения работы сайтов есть практика отключения Viewstate совсем.
Если ваши файлы разделяются между всеми пользователями, то замените хранение в сессии на хранение в Cache
Так же можно воспользоваться сторонним кеш-сервисом (memcached, redis и тд).
Для экономии оперативной памяти вы можете хранить ваши временные файлы на диске между запросами. При небольшом объеме оперативки вам придется сделать выбор между производительностью (хранение в памяти любого кеш-сервиса) и загрузкой памяти (хранить на диске).
Если задача это позволяет, то можно попытаться переделать последовательность работы с файлами исключающую потребность в их хранении между запросами. Например, вначеле мы собираем информацию об обработке файлов от пользователя и только в конце применяем все алгоритмы к данным из файлов.

T-SQL: Помогите оптимизировать запрос

Добрый день.
Есть запрос, который выполняется большое кол-во времени (даже примерно сказать не могу, больше 3ех минут). Таймаут на выполнение запроса стоит 1 мин, потом ее выполнение обрывается. Все индексы построены, в запрос 1 SELECT:
SELECT p.[personId] as [personId], --r.[innerId], p.inn as ИНН, ps.[firstNameRu] as [Имя рус.], ps.[lastNameRu] as [Фамилия рус.], ps.[middleNameRu] as [Отчество рус.], ps.[firstNameUa] as [Имя укр.] , ps.[lastNameUa] as [Фамилия укр.], ps.[middleNameUa] as [Отчество укр.], ps.[birthday] as [Дата рождения], p.[phone] as Телефон, ( select comment+', ' from dbo.Reason where personId = p.personId for xml path('') ) as Причина, CASE WHEN ps.[lostDate] IS NULL THEN 0 WHEN ps.[lostDate] IS NOT NULL THEN 1 END as [Паспорт потерян], ps.[series] as Серия, ps.[number] as Номер, ps.[office] as [Место выдачи], ps.[dateReceipt] as [Дата выдачи], p.[city] as Город, ps.[address] as Прописка FROM dbo.Person (NOLOCK) p LEFT JOIN dbo.Passport (NOLOCK) ps ON ps.personId = p.personId
WHERE
--isnull(inn,0)=isnull(@inn,isnull(inn,0))
(isnull(inn, 0) = isnull(@inn, isnull(inn,0))) AND (isnull([firstNameRu], 0) = isnull(@firstNameRu, isnull([firstNameRu],0))) AND (isnull([lastNameRu], 0) = isnull(@lastNameRu, isnull([lastNameRu],0))) AND (isnull([middleNameRu], 0) = isnull(@middleNameRu, isnull([middleNameRu],0))) AND (isnull([firstNameUa], 0) = isnull(@firstNameUa, isnull([firstNameUa],0))) AND (isnull([lastNameUa], 0) = isnull(@lastNameUa, isnull([lastNameUa],0))) AND (isnull([middleNameUa], 0) = isnull(@middleNameUa, isnull([middleNameUa],0))) AND ((@birthday is null) or (ps.[birthday] = @birthday)) AND (isnull([phone], 0) = isnull(@contactPhone, isnull(phone,0))) AND ----(@reason is null) or ( ---- CONTAINS(( ---- select comment+', ' from dbo.Reason ---- where personId = p.personId ---- for xml path('') ---- ), @reason) ----)) AND --(@PassportLost is null) or --( --(CASE -- WHEN ps.[lostDate] IS NULL THEN 0 -- WHEN ps.[lostDate] IS NOT NULL THEN 1 --END) = @PassportLost --) AND (isnull([series], 0) = isnull(@passportSeries, isnull([series],0))) AND (isnull([number], 0) = isnull(@passportNumber, isnull([number],0))) AND (isnull([office], 0) = isnull(@ktoVidal, isnull([office],0))) AND ((@PassportReceivingDate is null) or ( [dateReceipt] = @PassportReceivingDate)) AND (isnull([city], 0) = isnull(@City, isnull([city],0))) AND (isnull([address], 0) = isnull(@PassportAdress, isnull([address],0)))
Смысл запроса: у нас есть 2 связанные таблицы и большое число параметров. по которым может производиться отбор (всего около 15 параметров, причем могут быть заданы не все, а например только 1 фильтр, или 2 и 3ий)
Подскажите, пожалуйста, как можно оптимизировать запрос?
Спасибо
План выполнения запроса показал, что 60% идет поиск в таблице Person:


Ответ

Я переписал запрос, и сделал его динамическим. Решило все проблемы. Всем спасибо.

Получить стиль с xml

Всем привет работаю на apache poi надо через xml получить стиль ячеек а именно 'объединение'. Сделал таким вот образом
21 3. Жыл соңына жылжымалы құрам
А в самом классе
spreadsheet.addMergedRegion(new CellRangeAddress( records.getMergeR(), records.getMergeR1(), records.getMergeC(), records.getMergeC1()) );
Есть ли альтернативный способ это сделать?!


Ответ

// Объединить ячейки(startRow, endRow, startColumn, endColumn) sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
тут подробней написано http://www.programru.com/blog/MYTO0ADMwITz.html

Сортировка слиянием и ub

void merge(const int* a1, const int* a2, int* buffer, const int& l1, const int& l2) { int a(0), b(0);
while(a + b < l1 + l2) { if(b >= l2 || a < l1 && a1[a] <= a2[b]) { buffer[a + b] = a1[a]; ++a; } else { buffer[a + b] = a2[b]; ++b; } } }
Вот это логическое выражение b >= l2 || a < l1 && a1[a] < a2[b], разве не будет ub? тк выполняется && при a не вышедшем за длину массива и при b вышедшем - обращение к a2[b], при неком стечении обстоятельств, это не будет ub? Чтение при выходе за границу массива.


Ответ

Условие в jf предложении можно записать как
if ( ( b >= l2 ) || ( a < l1 && a1[a] < a2[b] ) )
Согласно Стандарту С (6.5.14 Logical OR operator)
4 Unlike the bitwise | operator, the || operator guarantees left-to-right evaluation; if the second operand is evaluated, there is a sequence point between the evaluations of the first and second operands. If the first operand compares unequal to 0, the second operand is not evaluated
Поэтому сначала вычисляется левый операнд оператора ||, и только в случае, если результат вычисления равен 0, вычисляется правый операнд оператора.
Так что в этом условие неопределенного поведения нет.

Gradient влияет на hover

Добрый день,подскажите как быть у 1 таблицы сделан градиент и hover.Ховер почему то дико резко происходит, а во втором варианте просто background без градиента и все плавно.Как исправить эту резкость? https://jsfiddle.net/Zkolya_linkoln/rgzzf94o/1/
#tablemenu1 td { cursor:pointer; background: linear-gradient(to bottom,#00b200,#009900); width:10%; height:45px; vertical-align: middle; border:1px solid #339900; text-align:center; transition: 2s; color:white; font-weight:900; font-family:"Roboto", Arial, sans-serif; } #tablemenu1 td:hover { background: #00b200; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); }
Спасибо!


Ответ

При наведении нужно изменять linear-gradient.
#tablemenu1{ width:100%;} #tablemenu1 td:first-child { border-top-left-radius: 15px; border-bottom-left-radius: 15px; } #tablemenu1 td:last-child { border-top-right-radius: 15px; border-bottom-right-radius: 15px; } #tablemenu1 td { cursor:pointer; background: linear-gradient(to bottom,#00b200,#009900); width:10%; height:45px; vertical-align: middle; border:1px solid #339900; text-align:center; transition: 2s; color:white; font-weight:900; font-family:"Roboto", Arial, sans-serif; } #tablemenu1 td a {color:white;} #tablemenu1 td:hover { //background:#22dd66; background: linear-gradient(to bottom,#00b200,#00b200); //background: #00b200; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); } /*------------------------*/ #tablemenu2{ width:100%;} #tablemenu2 td:first-child { border-top-left-radius: 15px; border-bottom-left-radius: 15px; } #tablemenu2 td:last-child { border-top-right-radius: 15px; border-bottom-right-radius: 15px; } #tablemenu2 td { cursor:pointer; background: green; width:10%; height:45px; vertical-align: middle; border:1px solid #339900; text-align:center; transition: 2s; color:white; font-weight:900; font-family:"Roboto", Arial, sans-serif; } #tablemenu2 td a {color:white;} #tablemenu2 td:hover { background: #00b200; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); }

Об Учереждении Аккредитация

Об Учереждении Аккредитация

Java, скроллинг

Пытаюсь с помощью функции setValue заставить вставать verticalScrollBar в нужное положение, все работает. Но в цикле почему-то нет.
JScrollPane sp = new JScrollPane(); JScrollBar verticalScrollBar = sp.getVerticalScrollBar(); while(iМожет, нужно как то обновлять полосу прокрутки?


Ответ

Попробуйте устанавливать положение скролла вот так:
sp.getViewport().setViewPosition(...);
И я рекомендую Вам почитать про создание анимации в Swing.
UPDATE: Вы что-то делаете не так, вот я не поленился, этот способ - работает:
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
public class Main extends JFrame {
public static void main(String[] args) throws Exception{ Main main = new Main(); main.setVisible(true); Thread.sleep(1000); main.animateScrollDown(); }
private final JScrollPane scrollPane = new JScrollPane(new SimpleComponent(750,1200));
private final Timer scrollTimer = new Timer(10, new TimerListener());
{ add(scrollPane); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(new Dimension(800, 600)); setLocationRelativeTo(null); }
private void animateScrollDown() { scrollTimer.start(); }
private class TimerListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { JViewport viewport = scrollPane.getViewport(); Point viewPosition = viewport.getViewPosition(); viewPosition.y += 1; if (viewPosition.y > viewport.getView().getHeight() - viewport.getHeight()){ scrollTimer.stop(); } else { viewport.setViewPosition(viewPosition); } } }
private class SimpleComponent extends JComponent{
Dimension size;
public SimpleComponent(int width, int height){ size = new Dimension(width, height); setSize(size); setMinimumSize(size); setPreferredSize(size); setMaximumSize(size); }
@Override protected void paintComponent(Graphics g) { g.drawLine(0, 0, size.width, size.height); } } }