Reputation: 615
I'm using Butterknife(8.4.0) to instantiate my views in a fragment that has several EditTexts.
I'm using these EditTexts to set a string to a specific Model attribute. I don't want to create loads of bind methods for each Edittext so on @onTextChanged
I pass in all the edit texts. I'm only interested in AfterTextChanged()
so I've also passed that in. I then use the editText ids to specify which model attribute should be set.
@BindView(R.id.edit_text_one) EditText textFieldOne;
@BindView(R.id.edit_text_two) EditText textFieldTwo;
@OnTextChanged(value = {R.id.edit_text_one, R.id.edit_text_two}, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
void setEditTextFields(EditText editText, Editable editable) {
switch (editText.getId()) {
case R.id.edit_text_one:
myModel.setStringOne(editable.toString());
break;
case R.id.edit_text_two:
myModel.setStringTwo(editable.toString());
break;
}
}
However I'm getting a compile error
Error:(117, 10) error: @OnTextChanged methods can have at most 1 parameter(s). (com.skeeno.android.gamecabinet.Fragment.EditorFragment.setEditTextFields)
I've read here that you just pass in the view as the first argument but that doesn't seem to work since AfterTextChanged is only expecting an editable.
Is there a way to do this?
Any help will be greatly appreciated. Thanks.
Upvotes: 1
Views: 1284
Reputation: 889
It is a little bit late but if anyone will have this issue, answer can be helpful therefore, here how i make it work. You cannot send two parameter method for AFTER_TEXT_CHANGED
therefore; you need to change method void setEditTextFields(EditText editText, Editable editable)
to void setEditTextFields(Editable editable)
. In this case you need to write @OnTextChanged
for all EditText
you want to listen.
Here is final code should be;
@BindView(R.id.edit_text_one) EditText textFieldOne;
@BindView(R.id.edit_text_two) EditText textFieldTwo;
@OnTextChanged(value =R.id.edit_text_one, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
void edit_text_oneChanged(Editable editable) {
myModel.setStringOne(editable.toString());
}
@OnTextChanged(value =R.id.edit_text_two, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED)
void edit_text_twoChanged(Editable editable) {
myModel.setStringTwo(editable.toString());
}
Upvotes: 0
Reputation: 988
Passing View with @onTextChanged is not possible currently. I tried too.
However, below code can be used to get the current view,
//Inside a fragment
View view = getActivity().getCurrentFocus();
Hope this helped.
Upvotes: 1