2016-12-15 3 views
2

Я пытаюсь связать:Android DataBinding поплавок TextView

@Bindable 
public float getRoundInEditAmount() 
{ 
    return roundInEdit.getAmount(); 
} 

@Bindable 
public void setRoundInEditAmount(float amount) 
{ 
    roundInEdit.setAmount(amount); 
    notifyPropertyChanged(BR.roundInEditAmount); 
} 

в

<EditText 
      android:layout_width="100dp" 
      android:layout_height="50dp" 
      android:inputType="numberDecimal" 
      android:text="@={`` + weightSet.roundInEditAmount}" 
      ></EditText> 

Однако щелкать на EditText я представлен с ввода текста не число колодки. Если я снова нажму на этот EditText, я буду представлен с помощью цифровой клавиатуры. Если для поля установлено значение 50.0 или другое значение, я не могу удалить эти суммы. Я могу ввести текст, хотя он сохраняется.

Неужели кто-то еще сталкивается с этим поведением с вводом текста при первом щелчке, а не с цифровой клавиатуры? Кроме того, двусторонняя привязка к EditText работает так, как я ожидаю. Я написал свой собственный Binding и InverseBinding адаптер, и они ведут себя одинаково -> TextInput при первом щелчке, а затем цифровую панель на втором клике, но вы не можете удалить номер, с которого вы начинаете.

+0

Можете ли вы объяснить, почему вам нужно textinput при первом щелчке и номерной доске во втором клике? –

+0

Если вы прочитали вопрос, вы увидите, что это не обязательное, а фактическое поведение. – Luthervd

+0

Привет, roundInEdit - это какой тип переменной –

ответ

0

попробовать, как этот

<EditText 
      android:layout_width="100dp" 
      android:layout_height="50dp" 
      android:inputType="numberDecimal" 
      android:text="@={String.valueOf(weightSet.roundInEditAmount)}"/> 
3

Если вы используете Android Databinding библиотеки, он решает путем создания binding adapter.

public class BindingUtils { 

    @BindingAdapter("android:text") 
    public static void setFloat(TextView view, float value) { 
     if (Float.isNaN(value)) view.setText(""); 
     else view.setText(... you custom formatting); 
    } 

    @InverseBindingAdapter(attribute = "android:text") 
    public static float getFloat(TextView view) { 
     String num = view.getText().toString(); 
     if(num.isEmpty()) return 0.0F; 
     try { 
      return Float.parseFloat(num); 
     } catch (NumberFormatException e) { 
      return 0.0F; 
     } 
    } 
} 
Смежные вопросы