Вы можете включить свою функцию в блок Runnable
следующим образом
Runnable myFunction = () -> System.out.println("some function");
void runOnMain(Runnable runnable) {
mActivity. runOnUiThread {
runnable.run();
}
}
Наконец, вызовите свой метод:
runOnMain(myFunction);
Я надеюсь, вы скоро переключитесь на Kotlin и выполните такие действия намного проще:)
Вот то, что я закончил тем, что делал. Я записал пользовательский шаблон stringfilter для передвижения тегов. Теперь, мой код шаблона похож на это:
{% load pretty_forms %}
<form action="." method="POST">
{{ form.as_p|pretty_checkbox }}
<p><input type="submit" value="Submit"></p>
</form>
единственной разницей от простого шаблона Django является добавление {% загрузки %} тег шаблона и фильтр pretty_checkbox.
Вот функциональная, но ужасная реализация [1 118] pretty_checkbox - этот код не имеет никакой обработки ошибок, это предполагает, что сгенерированные атрибуты Django отформатированы в очень особенном методе, и это была бы плохая идея использовать что-либо как это в Вашем коде:
from django import template
from django.template.defaultfilters import stringfilter
import logging
register=template.Library()
@register.filter(name='pretty_checkbox')
@stringfilter
def pretty_checkbox(value):
# Iterate over the HTML fragment, extract <label> and <input> tags, and
# switch the order of the pairs where the input type is "checkbox".
scratch = value
output = ''
try:
while True:
ls = scratch.find('<label')
if ls > -1:
le = scratch.find('</label>')
ins = scratch.find('<input')
ine = scratch.find('/>', ins)
# Check whether we're dealing with a checkbox:
if scratch[ins:ine+2].find(' type="checkbox" ')>-1:
# Switch the tags
output += scratch[:ls]
output += scratch[ins:ine+2]
output += scratch[ls:le-1]+scratch[le:le+8]
else:
output += scratch[:ine+2]
scratch = scratch[ine+2:]
else:
output += scratch
break
except:
logging.error("pretty_checkbox caught an exception")
return output
pretty_checkbox сканирует свой аргумент строки, находит пар < label> и < input> теги, и передвигают их если < input> тип тега является "флажком". Это также лишает последний знак маркировки, которая, оказывается, ':' символ.
Преимущества:
Недостатки:
Порядок исходных данных и маркировок обеспечивается через normal_row параметр формы и нет никаких различных шаблонов строки для флажков. Таким образом, существует два способа сделать это (в 0,96 версиях точно):
1. переопределите _html_output формы
2. используйте CSS, чтобы сменить положение маркировки и флажка
Вот решение, которое я придумал (Django V1.1):
{% load myfilters %}
[...]
{% for field in form %}
[...]
{% if field.field.widget|is_checkbox %}
{{ field }}{{ field.label_tag }}
{% else %}
{{ field.label_tag }}{{ field }}
{% endif %}
[...]
{% endfor %}
Вам нужно будет создать пользовательский тег шаблона ( В этом примере в файле «MyFilters.py»), содержащий что-то вроде этого:
from django import template
from django.forms.fields import CheckboxInput
register = template.Library()
@register.filter(name='is_checkbox')
def is_checkbox(value):
return isinstance(value, CheckboxInput)
Доступно больше информации о пользовательских тегах шаблонов здесь .
Редактировать : В духе собственном ответа АСКЕРСА:
Преимущества:
Недостатки:
Я взял ответ от ромкинов и сделал его немного более общим
def field_type(field, ftype):
try:
t = field.field.widget.__class__.__name__
return t.lower() == ftype
except:
pass
return False
Таким образом, вы можете напрямую проверить тип виджета с помощью строки
{% if field|field_type:'checkboxinput' %}
<label>{{ field }} {{ field.label }}</label>
{% else %}
<label> {{ field.label }} </label> {{ field }}
{% endif %}